求前辈指教数据结构线性表顺序结构的问题

Samerol_Jomior 2013-07-23 11:37:05
这个是我参考一些书后自己写的线性表顺序结构,但是在运行的时候是死循环,找了半天没找出来原因,求前辈们指教。。。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h >
#define OK 1
#define ERROR 0
#define MAXSIZE 20
#define INCREMENT 10
typedef int datatype;
typedef struct
{
datatype *data;
int length;
int listsize;
}sqlist;

int Initlist(sqlist *L)
{
L->data=(datatype*)malloc(MAXSIZE*sizeof(datatype));
if(!L->data) return ERROR;
L->length=0;
L->listsize=MAXSIZE;
return OK;
}
int insertlist(sqlist *L,int i,datatype e)
{
datatype *newbase;
int k;
if(i<1||i>L->length) return ERROR;
if(L->length>=L->listsize)
{
newbase=(datatype*)realloc(L->data,(L->listsize+INCREMENT)*(sizeof(datatype)));
L->data=newbase;
L->listsize+=INCREMENT;
}
for(k=L->length-1;k>=i-1;k--)
L->data[k+1]=L->data[k];
L->data[i-1]=e;
L->length++;
return OK;
}

int deletelist(sqlist *L,int i,datatype *e)
{
int k;
if(i<1||i>L->length) return ERROR;
*e=L->data[i-1];
for(k=i;k<=L->length-1;k++)
L->data[k-1]=L->data[k];
L->length--;
return OK;
}

int locate(sqlist L,datatype x)
{
datatype *p;
int i=1;
p=L.data;
while(p||i<=L.length)
{
if(*p!=x)
{
++i;
++p;
}
else
return i;
}
return 0;
}
int countlist(sqlist L)
{
datatype *p;
int i=1;
p=L.data;
while(p)
{
++p;
++i;
}
return i;
}


void create(sqlist *L,int m)
{
int i;
datatype e;
printf("\n\t依次输入元素:");
for(i=1;i<=m;i++)
{
scanf("%d",&e);
insertlist(L,i,e);
}
}

void printlist(sqlist L)
{
int i,m;
for(i=1;i<=m;i++)
printf("%d",L.data[i-1]);
}


void listoperate(sqlist L)
{
int i,e,x;
int choose;
while(1)
{
printf("\n\n");
printlist(L);
printf("\n\t|**********线性表操作界面***********|");
printf("\n\t|*1.插入 2.删除 3.查找 4.元素个数 0.退出*|");
printf("\n\t|*-->请输入你的选择: ");
scanf("%d", &choose);
switch(choose)
{
case 1:
{
printf("请输入插入元素位置和元素数值:");
scanf("%d %d",&i,&e);
if(insertlist(&L,i,e))
printlist(L);
else
printf("输入错误!");
break;
}
case 2:
{
printf("请输入想要删除元素的位置:");
scanf("%d",&i);
if(deletelist(&L,i,&e))
printlist(L);
else
printf("输入错误!");
break;
}
case 3:
{
printf("请输入想要查找的元素的数值:");
scanf("%d",&x);
if(locate(L,x))
{
i=locate(L,x);
printf("%d",i);
}
break;
}
case 4:
{
printf("顺序表的元素个数为:");
i=countlist(L);
printf("%d",i);
break;
}
case 0:
{
exit(OK);
break;
}
default:
printf("\t输入指令错误,请按规则输入\n\n");
break;
}
}
}

int main(int argc, char ** argv)
{
sqlist L;
int m;
if(Initlist(&L))
{
printf("\n\t线性表表初始化成功,继续创建线性表\n");
printf("\n\t请输入元素个数( m ): ");
scanf("%d",&m);
create(&L, m);
}
printf("\n\t");
printf("\t线性表创建成功,按任意键进入操作界面");
getch();
system("cls");
listoperate(L);

return OK;
}
...全文
44 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-07-23
  • 打赏
  • 举报
回复
1. int i,m; for(i=1;i<=m;i++) 是用未初始化的变量. 2. while(p||i<=L.length) 是不是该用 && ?
Samerol_Jomior 2013-07-23
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
1. int i,m; for(i=1;i<=m;i++) 是用未初始化的变量. 2. while(p||i<=L.length) 是不是该用 && ?
啊啊。。太粗心了。。解决了~~非常感谢~~

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧