运行之后出现的顺序表位置一直-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;
}