运行之后出现的顺序表位置一直-842150451

问题遇到的现象和发生背景

运行之后出现的顺序表位置一直-842150451

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

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;

#define MAXSIZE 100

typedef struct
{
int *elem;
int length;
}SqList;

Status InitList(SqList &L)
{
L.elem = new int[MAXSIZE];
if(!L.elem)
exit (OVERFLOW);
L.length = 0;
return OK;
}

Status ListInsert(SqList &L,int i,int e)
{
int j;
if((i<1)||(i>L.length+1)) return ERROR;

if(L.length==MAXSIZE) return ERROR;

for(j=L.length-1;j>=i-1;j--)

    L.elem[j+1]=L.elem[j];

L.elem[i-1]=e;

++L.length;

return OK;

}

Status ListDelete(SqList &L,int i,int &e)

{
int j;
e=L.elem[i-1];
if((i<1)||(i>L.length+1)) return ERROR;
for(j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
--L.length;

return OK;

}

Status GetElem(SqList L,int i,int &e)
{
if((i<1)||(i>L.length+1)) return ERROR;
e=L.elem[i-1];
return OK;
}

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

}

int main()
{
int n,x,i,j;
SqList mylist;

InitList(mylist);

printf("准备输入多少个数据?");
scanf("%d",&n);
printf("开始输入%d个数据:",n);
//以下代码为利用ListInsert函数建立顺序表的过程
for(i=1; i<=n; i++)
{
    scanf("%d",&x);        
    ListInsert(mylist,i,x);
}

printf("\n顺序表的长度为:%d \n",mylist.length);
printf("顺序表内容为: \n");
for(j=0;j<n; j++)
    printf("%d \n",mylist.elem[j]);

//以下代码为根据用户输入,给一个顺序表插入指定数字的过程

printf("\n准备插入新元素,请输入新元素的值: ");
scanf("%d", &x);
printf("输入插入的位置: ");
scanf("%d", &i);
ListInsert(mylist,i,x);

printf("\n插入完成后,顺序表的长度为:%d \n",mylist.length);
printf("顺序表内容为:  \n");
for(j=0;j<mylist.length; j++)
    printf("%d  \n",mylist.elem[j]);


printf("\n即将删除1个元素,请输入元素的序号: ");
int e;
scanf("%d", &i);
ListDelete(mylist,i,e);
printf("被删除的是第%d个元素:%d \n",i,e);


printf("\n删除完成后,顺序表的长度为:%d \n",mylist.length);
printf("顺序表内容为:  \n");
for(j=0;j<mylist.length; j++)
    printf("%d  \n",mylist.elem[j]);

:调用实验3和实验4中完成的函数,查询数据由键盘输入

printf("\n获取顺序表的一个元素位置为:");
    scanf("%d",&i);
GetElem(mylist,i,x);
printf("所取值位置是%d的数为%d \n",i,x);
printf("\n所要查询的元素为:");
scanf("%d",&x);
printf("被查找的是第%d个元素\n:",LocateElem(mylist,x));

return 0;

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

试了下,没问题啊,整理如下,供参考:

#include <stdlib.h>
#include <stdio.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
#define MAXSIZE 100

typedef struct
{
    int *elem;
    int length;
}SqList;

Status InitList(SqList &L)
{
    L.elem = new int[MAXSIZE];
    if(!L.elem)
       exit (OVERFLOW);
    L.length = 0;
    return OK;
}

Status ListInsert(SqList &L,int i,int e)
{
    int j;
    if((i<1)||(i>L.length+1)) return ERROR;
    if(L.length==MAXSIZE) return ERROR;
    for(j=L.length-1;j>=i-1;j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=e;
    ++L.length;
    return OK;
}

Status ListDelete(SqList &L,int i,int &e)
{
    int j;
    e=L.elem[i-1];
    if((i<1)||(i>L.length+1)) return ERROR;
    for(j=i;j<=L.length-1;j++)
        L.elem[j-1]=L.elem[j];
    --L.length;
    return OK;
}

Status GetElem(SqList L,int i,int &e)
{
    if((i<1)||(i>L.length+1)) return ERROR;
    e=L.elem[i-1];
    return OK;
}
int LocateElem(SqList L,int e)
{
    int i;
    for(i=0;i<L.length;i++)
       if(L.elem[i]==e)
          return i+1;
    return 0;
}

int main()
{
    int n,x,i,j;
    SqList mylist;

    InitList(mylist);
 
    printf("准备输入多少个数据?");
    scanf("%d",&n);
    printf("开始输入%d个数据:",n);
    //以下代码为利用ListInsert函数建立顺序表的过程
    for(i=1; i<=n; i++)
    {
        scanf("%d",&x);
        ListInsert(mylist,i,x);
    }

    printf("\n顺序表的长度为:%d \n",mylist.length);
    printf("顺序表内容为: \n");
    for(j=0;j<n; j++)
        printf("%d \n",mylist.elem[j]);
 
    //以下代码为根据用户输入,给一个顺序表插入指定数字的过程
 
    printf("\n准备插入新元素,请输入新元素的值: ");
    scanf("%d", &x);
    printf("输入插入的位置: ");
    scanf("%d", &i);
    ListInsert(mylist,i,x);
 
    printf("\n插入完成后,顺序表的长度为:%d \n",mylist.length);
    printf("顺序表内容为:  \n");
    for(j=0;j<mylist.length; j++)
        printf("%d  \n",mylist.elem[j]);

 
    printf("\n即将删除1个元素,请输入元素的序号: ");
    int e;
    scanf("%d", &i);
    ListDelete(mylist,i,e);
    printf("被删除的是第%d个元素:%d \n",i,e);
 
 
    printf("\n删除完成后,顺序表的长度为:%d \n",mylist.length);
    printf("顺序表内容为:  \n");
    for(j=0;j<mylist.length; j++)
        printf("%d  \n",mylist.elem[j]);

    //:调用实验3和实验4中完成的函数,查询数据由键盘输入

    printf("\n获取顺序表的一个元素位置为:");
    scanf("%d",&i);
    GetElem(mylist,i,x);
    printf("所取值位置是%d的数为%d \n",i,x);
    printf("\n所要查询的元素为:");
    scanf("%d",&x);
    printf("被查找的是第%d个元素:\n",LocateElem(mylist,x));

    return 0;
}