顺序表的基本操作问题

顺序表的基本操作运行时有一个问题

```c
#include <stdlib.h>
#include <stdio.h>

#define InitSize 10 //默认的最大长度
typedef struct{
    int *data;//指示动态分配数组的指针,指向分配内存空间的第一个位置
    int MaxSize;//顺序表的最大容量
    int length;//顺序表的当前长度
}SeqList; 

void InitList(SeqList &L){
    //用malloc函数申请一片连续的存储空间
    L.data=(int *)malloc(InitSize*sizeof(int));
    L.length=0;
    L.MaxSize=InitSize;
}

void IncreaseSize(SeqList &L,int len){
    int *p=L.data;
    L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
    for(int i=0;i<L.length;i++){
        L.data[i]=p[i];//将数据复制到新区域
    }
    L.MaxSize=L.MaxSize+len;//顺序表最大长度增加len
    free(p);//释放原来的内存空间
}

SeqList ListInsert(SqList &L,int i,int e){
    if(i<1||i>L.length+1)//判断i的范围是否有效
    {
        printf("INSERT ERROR!");
    }
    else if(L.length>=MaxSize)//当前存储空间已满
    {
        printf("OVERFLOW!");
    }
    else
    {
    for(int j=L.length;j>i;j--)//将第i个元素及之后的元素后移
    
    {
        L.data[j]=L.data[j-1];
    L.data[i-1]=e;//在位置i处(对应数组下标为i-1)放入e
    L.length++;//长度加1
    }
    }
    return L;
}

SeqList ListDelete(SeqList &L,int i,int &e){
    if(i<1||i>L.length+1)//判断i的范围是否有效
        printf("DELETE ERROR!");
    else{
    e=L.data[i-1];
    for(j=i;j<L.length;j++)
        L.data[j-1]=L.data[j];
    L.length--;
    }
    return L;
}

void ListDisplay(SeqList L){
    int j;
    for(j=0;j<=L.length-1;j++)
        printf("%4d",L.data[j]);
    printf("\n");
}

int LocateElem(SeqList L,int e){
    for(int i=0;i < L.length;i++)
        if(L.data[i]==e)
            return i+1;
        return 0;
}

int main(){
    SeqList L;
    InitList(L);
    int j;
    printf("\n请输入顺序表长度:");
    scanf("%d",&L.length);
    printf("请输入顺序表元素:\n");
    for(j=0;j<=L.length-1;j++){
        scanf("%d",&L.data[j]);
    }
    //插入元素
    int i,x;
    printf("请输入插入操作位置:");
    scanf("%d",&i);
    printf("请输入插入的新元素:");
    scanf("%d",&x);
    L=ListInsert(L,i,x);
    //删除元素
    int e;
    printf("请输入删除操作位置:");
    scanf("%d",&i);
    L=ListDelete(L,i,e);
    return 0;
}


有一个错误,但是提示里面不止一个,好像说 L=ListDelete(L,i,e);这句话不匹配
但是改了也不对
谢谢

c没有引用&,用指针。


#define InitSize 10 //默认的最大长度
typedef struct
{
    int *data;   //指示动态分配数组的指针,指向分配内存空间的第一个位置
    int MaxSize; //顺序表的最大容量
    int length;  //顺序表的当前长度
} SeqList;

void InitList(SeqList *L)
{
    //用malloc函数申请一片连续的存储空间
    L->data = (int *)malloc(InitSize * sizeof(int));
    L->length = 0;
    L->MaxSize = InitSize;
}
void IncreaseSize(SeqList *L, int len)
{
    int *p;
    p = (int *)realloc(L->data, (L->MaxSize + len) * sizeof(int));
    if (p != NULL)
    {
        L->data = p;
        p = NULL;
        L->MaxSize = L->MaxSize + len; //顺序表最大长度增加len
    }
}

void ListInsert(SeqList *L, int i, int e) //
{
    if (i < 1 || i > L->length + 1) //判断i的范围是否有效
    {
        printf("INSERT ERROR!");
    }
    else if (L->length >= L->MaxSize) //当前存储空间已满
    {
        printf("OVERFLOW!");
    }
    else
    {
        for (int j = L->length; j >= i; j--) //将第i个元素及之后的元素后移
        {
            L->data[j] = L->data[j - 1];
        }
        L->data[i - 1] = e; //在位置i处(对应数组下标为i-1)放入e
        L->length++;        //长度加1
    }
    // return L;
}
void ListDelete(SeqList *L, int i, int *e) //
{
    if (i < 1 || i > L->length + 1) //判断i的范围是否有效
        printf("DELETE ERROR!");
    else
    {
        *e = L->data[i - 1];
        for (int j = i; j < L->length; j++)
            L->data[j - 1] = L->data[j];
        L->length--;
    }
    // return L;
}
void ListDisplay(SeqList *L)
{
    int j;
    for (j = 0; j <= L->length - 1; j++)
        printf("%4d", L->data[j]);
    printf("\n");
}
int LocateElem(SeqList *L, int e)
{
    for (int i = 0; i < L->length; i++)
        if (L->data[i] == e)
            return i + 1;
    return 0;
}
int main()
{
    SeqList L;
    InitList(&L);

    printf("\n请输入顺序表长度:");
    scanf("%d", &L.length);

    printf("请输入顺序表元素:\n");
    for (int j = 0; j < L.length; j++) //
    {
        scanf("%d", &L.data[j]);
    }
    ListDisplay(&L);

    //插入元素
    int i, x;
    printf("请输入插入操作位置:");
    scanf("%d", &i);
    printf("请输入插入的新元素:");
    scanf("%d", &x);
    ListInsert(&L, i, x); //
    ListDisplay(&L);

    //删除元素
    int e;
    printf("请输入删除操作位置:");
    scanf("%d", &i);
    ListDelete(&L, i, &e); //

    ListDisplay(&L);

    return 0;
}


你可以参考下这篇文章:顺序表的基本操作实现