单链表问题??

manymore13 2010-11-18 08:24:13


#include<stdio.h>
#include<malloc.h>
typedef struct Student
{
int num;
struct Student *next;
}student;
/**************创建链表******************/
student * creat(int temp)
{
student *L,*p,*h;
h=L=(student*)malloc(sizeof(student));
h->next=NULL;
while((p->num)!=temp)
{
p=(student*)malloc(sizeof(student));
scanf("%d",&p->num);
L->next=p;
L=p;
}
L->next=NULL;
return h;
}
/**********输出链表********************/
void output(student *head)
{
student *p;
p=head->next;
while(p!=NULL)
{
printf("%3d",p->num);
p=p->next;
}
}
/******定位元素,返回该地址**************/
student *LocateElem(student *head,int elem)
{
student *p;
p=head->next;
while(p!=NULL && p->num!=elem)
{
p=p->next;
}
return p;
}
/******返回前驱************************/
student *PriorElem(student *L,int elem)
{
student *p,*q;
p=L->next;
while(p!=NULL && p->num != elem)
{
q=p;
p=p->next;
}
return q;
}
/***************求表长****************/
int Lenth(student *L)
{
int n=0;
while(L->next!=NULL)
{
n++;
L=L->next;
}
return n;
}
/*************插入元素****************/
int ListInsert(student *L,int i,int elem)
{
int n;
student *s,*p;
p=L->next;
s=(student *)malloc(sizeof(student));
s->num=elem;
/* if(i<1 || i>Lenth(L)+1)
{
printf("您输入超出范围");
return 0;
} */
for(n=1;n<i;n++)
{
p=p->next;
}
s->next=p->next;
p->next=s;
return 1;
}

/*******************删去元素**********************/
int Delete(student *L,int i)
{
int j;
student *p=L,*q;
if(i<1 || i>Lenth(L))
{
printf("您输入有误");
return 0;
}
while(j<i)
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
free(q);
return 1;
}
int main()
{
student *head;
int x,elem,Len;
int insert_i,e;
printf("请输入链表最后一个值作为结束标志:");
scanf("%d",&x);
printf("请输入链表元素:\n");
head=creat(x);
printf("输出所有结点");
output(head);

Len=Lenth(head);
printf("\n链表长:%d",Len);

printf("\n请输入插入的元素:");
scanf("%d",insert_i);
printf("请输入插入的位置:");
scanf("%d",e);
ListInsert(head,e,elem);

output(head);
/*printf("从链表中一个元素输出到最后,那么请输入这个元素:");
scanf("%d",elem);
output(LocateElem(head,elem)); */
return 0;
}




...全文
102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
崖高人远 2010-11-18
  • 打赏
  • 举报
回复
过来瞧瞧的。。。。
hw_henry2008 2010-11-18
  • 打赏
  • 举报
回复



/**************创建链表******************/
student * creat(int temp)
{
student *L,*p,*h;
h=L=(student*)malloc(sizeof(student));
h->next=NULL;
////////////////////--Kulv--2010/11/18---20:58:45--///////////////////////
int newNum = 0 ;
scanf("%d",&newNum);

while( newNum != temp )//这里原来的严重错误
{
p=(student*)malloc(sizeof(student));
p->num = newNum ;
L->next=p;
L=p;
scanf("%d", &newNum);
}
L->next=NULL;
return h;
}
xiaolomg 2010-11-18
  • 打赏
  • 举报
回复
问题太大了,很多链表定义时没有初始化,会出问题的
liutengfeigo 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 manymore13 的回复:]

明明跟书上差不多,还是有错。。 编译没有错,但是运行有错,这个错误怎么找???
[/Quote]
慢慢去找吧,这是必经之路。
manymore13 2010-11-18
  • 打赏
  • 举报
回复
明明跟书上差不多,还是有错。。 编译没有错,但是运行有错,这个错误怎么找???
  • 打赏
  • 举报
回复

int ListInsert(student * &L,int i,int elem),
函数声明跟定义都改成如上
liutengfeigo 2010-11-18
  • 打赏
  • 举报
回复
代码没多长嘛。其实自己可以调出来的
manymore13 2010-11-18
  • 打赏
  • 举报
回复
运行到插入链表就出错 帮我看看这个代码。。 有补充的麻烦帮我补充一下。。 谢谢。
Csuxiaowu 2010-11-18
  • 打赏
  • 举报
回复
神马问题?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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