大哥大姐们,看看这个顺寻表错在哪里了,调式通过了,得不到结果?

浮生如梦VIP 2011-09-17 08:29:17
这个顺序表的程序,我已经调式通过了,但是却数不出结果,感觉是不是n=l.length出错,如果是
不清楚错到哪里了?如果不是,那是错在哪里了?
#include <stdio.h>
#include <stdlib.h>
#define listbegine 100
#define listincrease 10

typedef struct list
{
int *elem;
int length;
int listsize;

}la;
la l;
int creat()//建立一个空的线性表。
{

l.elem=(int *)malloc(sizeof(int));
if(!l.elem)
return -2;
l.length=0;
l.listsize=listbegine;
return 1;

}

int delet(int e)
{
int *p,i,j;
p=l.elem;
for(i=0;*(p+i)!=e&&i<l.length;i++);

for(j=i+1;j<l.length;j++)
*(p+j-1)=*(p+j);
--l.length;

return 1;

}

int insert(int i,int m)
{
int *p,*newbase,j;
if(i<1||i>l.length)
return -1;
newbase=(int *)realloc(l.elem,(l.listsize+listincrease)*sizeof(int));
if(!newbase)
exit (-2);
l.elem=newbase;
p=l.elem;
for(j=l.length;j>i;j--)
*(p+j+1)=*(p+j);
*(p+i)=m;
++l.length;
return 1;





}

void display()
{
int i,n;
n=l.length;
for(i=0;i<n;i++)
printf(" %d",l.elem[i]);
printf("\n");

}

void main()
{
int n,i,e,m;
creat();
printf("请输入线性表的个数n并输入相应的数值\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&l.elem[i]);//易错点。
display();
printf("请输入删除的元素e的值\n");
scanf("%d",&e);
delet(e);
display();
printf("请输入插入的位置i和插入的值m\n");
scanf("%d%d",&i,&m);
insert(i,m);
display();







}
...全文
61 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
querdaizhi 2011-09-17
  • 打赏
  • 举报
回复


#include <stdio.h>
#include <stdlib.h>
#define listbegine 100
#define listincrease 10

typedef struct list
{
int *elem;
int length;
int listsize;

}la;
la l;
int creat()//建立一个空的线性表。
{

l.elem=(int *)malloc(listbegine*sizeof(int));
if(!l.elem)
return -2;
l.length=0;
l.listsize=listbegine;
return 1;

}

int delet(int e)
{
int *p,i,j;
p=l.elem;
for(i=0;*(p+i)!=e&&i<l.length;i++);

for(j=i+1;j<l.length;j++)
*(p+j-1)=*(p+j);
--l.length;

return 1;

}

int insert(int i,int m)
{
int *p,*newbase,j;
if(i<1||i>l.length)
return -1;
newbase=(int *)realloc(l.elem,(l.listsize+listincrease)*sizeof(int));
if(!newbase)
exit (-2);
l.elem=newbase;
p=l.elem;
for(j=l.length;j>i;j--)
*(p+j+1)=*(p+j);
*(p+i)=m;
++l.length;
return 1;





}

void display()
{
int i,n;
n=l.length;
for(i=0;i<n;i++)
printf(" %d",l.elem[i]);
printf("\n");

}

void main()
{
int n,i,e,m;
creat();
printf("请输入线性表的个数n并输入相应的数值\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&l.elem[i]);//易错点。
l.length++;
}
display();
printf("请输入删除的元素e的值\n");
scanf("%d",&e);
delet(e);
display();
printf("请输入插入的位置i和插入的值m\n");
scanf("%d%d",&i,&m);
insert(i,m);
display();

}



改好了,LZ是大二刚学数据结构的孩纸么?
querdaizhi 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ol_lo 的回复:]

第一次for时,没有修改length
lx继续
[/Quote]


++
querdaizhi 2011-09-17
  • 打赏
  • 举报
回复


l.elem=(int *)malloc(sizeof(int));


就申请了一个int的空间.....
breamn 2011-09-17
  • 打赏
  • 举报
回复
int insert(int i,int m)
这个函数出错了,自己再看看吧,不难发现错在哪里的,
modicum_lf 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ol_lo 的回复:]
第一次for时,没有修改length
lx继续
[/Quote]

++

紫冰枫 2011-09-17
  • 打赏
  • 举报
回复
同意一楼,就是因为length没有修改,所以没有输出
可借鉴如下:
	for(i=0;i<n;i++,l.length = i)
scanf("%d",&l.elem[i]);//易错点。
xin_wu_hen 2011-09-17
  • 打赏
  • 举报
回复
结构体中的长度信息应该是所有节点的共有信息,最好定义为静态的变量。要不然,每个节点都有一个自己的值,运算中极容易出问题。
Ol_lO 2011-09-17
  • 打赏
  • 举报
回复
第一次for时,没有修改length
lx继续

69,371

社区成员

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

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