求助顺序表的实现,该怎么改
#include<stdio.h>#include<stdlib.h>
//存储结构的定义
//线性表
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef char ElemType; //用户自定义数据类型
typedef struct {
ElemType * elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
} SqList;
//基本操作的实现
//顺序表的初始化
void InitList(SqList &L ){
L.elem=(char*)malloc(LIST_INIT_SIZE*sizeof(char));
L.length=0;
L.listsize=LIST_INIT_SIZE;//线性表存储空间的初始分配量,长度为100
return ;
}
//销毁
void destruct(SqList &L){
free(L.elem);
}
//清空
void ClearList(SqList &L)
{
L.length=0;
return;
}
//判空
int ListEmpty(SqList L)
{
if(L.length==0)return 1;
else
return 0;
}
//求长度
int ListLength(SqList L)
{
return L.length;
}
//取元素
int GetElem(SqList &L,int i,ElemType &e)
{
if(i<1||i>L.length)
{
return 0;
}
e=L.elem[i-1];
return 1;
}
//插入
int ListInsert(SqList L,int i,ElemType e)
{
int j;
if(i<1||i>L.length+1)
{
return 0;
}
for(j=L.length-1;j>=i-1;--j)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
L.length++;
return L.length;
}
//定位
int LocateElem(SqList L,ElemType e)
{
int i=0;
while(i<L.length&&L.elem[i]!=e)
i++;
if(i<=L.length)
return i;
else
return 0;
}
//前驱
int PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
int i;
i=LocateElem(L,cur_e);
if(i)
{
//
if(i<=0)
{
return 0;
}
else
{
pre_e=L.elem[i-1];
return 1;
}
}
else
{
return 0;
}
}
//后继
int NextElem(SqList L,ElemType cur_e,ElemType &next_e)
{
int i;
i=LocateElem(L,cur_e);
if(i>=0)
{
//
if(i==L.length-1)
{
return 0;
}
else
{
next_e=L.elem[i+1];
return 1;
}
}
else
{
return 0;
}
}
//删除
int ListDelete(SqList &L,int i,ElemType &e)
{
int j;
if(i<1||i>L.length)
{
return 0;
}
if(ListEmpty(L))
{
return 0;
}
e=L.elem[i-1];
for(j=i;j<=L.length-1;j++)//数据前移操作
{
L.elem[j-1]=L.elem[j];
}
L.length--;
return 1;
}
//输出数据
void ListTraverse(SqList L)
{
int i;
for(i=0;i<L.length;i++)
{
printf("%5d",L.elem[i]);
}
return;
}
//测试代码
void main()
{
bool flag=1;
char e,e1;
char c;
int i,n,select,x1;
SqList L;
InitList(L);
n=5;
for(i=1;i<=n;i++)
{
c='A'+i-1;
L.length=ListInsert(L,i,c);
}
//循环代码
while(flag)
{
printf("\n");
printf("/******************************************************/\n");
printf("input your select:\n");
scanf("%d",&select);
switch(select){
case 0:flag=0;break;
case 1:x1=ListLength(L);
printf("顺序表的长度:%d",x1);
flag=1;
break;
case 2:ListInsert(L,3,'0');
ListTraverse(L);
flag=1;
break;
case 3:x1=ListEmpty(L);
if(x1==0)
printf("该表不为空\n");
else
printf("该表为空!!!\n");
flag=1;
break;
case 4:printf("请输入删除的位置,大于1小于6\n");
scanf("%d",&select);
x1=ListDelete(L,select,e);
if(x1==1)
{
printf("删除成功!!\n");
printf("删除的元素是:");
printf("%5d",e);
}
else
printf("删除失败,不存在该元素!!\n");
flag=1;
break;
case 5:printf("请输入插入的元素:\n");
scanf("%d",&e);
L.length=ListInsert(L,L.length,e);
if(L.length==0)
printf("插入失败!!\n");
else
printf("插入成功!!\n");
flag=1;
break;
case 6:printf("请输入需要查找的元素:\n");
scanf("%d",&e);
x1=PriorElem(L,e,e1);
if(x1==0)
printf("该元素没有直接前驱!!\n");
else
{
printf("该元素的直接前驱是:");
printf("%5d",e1);
printf("\n");
}
flag=1;
break;
case 7:printf("请输入需要查找的元素:\n");
scanf("%d",&e);
x1=NextElem(L,e,e1);
if(x1==0)
printf("该元素没有直接后继!!\n");
else
{
printf("该元素的直接后继是:");
printf("%5d",e1);
printf("\n");
}
flag=1;
break;
case 8:printf("请输入要取出的元素的位置:\n");
scanf("%d",&i);
x1=GetElem(L,i,e);
if(x1==0)
printf("该元素不存在表中!!\n");
else
{
printf("取出的元素是:\n");
printf("%5d",e);
printf("\n");
}
flag=1;
break;
default:printf("输入错误,请重新输入!!!!\n");
flag=1;
break;
}
}
}
用anyview只检查到循环代码有问题,哪里出问题实在找不出