c语言链表详解,不带头结点的链表,利用头插法存入信息,然后输出,没有error,却运行不了,求大神指点

用C语言实现: (1)用头插法(或尾插法)建立带头结点的单链表;_百度知道
用C语言实现: (1)用头插法(或尾插法)建立带头结点的单链表;
(2)对已建立的单链表实现插入、删除等基本操作;(3)输出链表所有结点数据内容。急求啊!!!
提问者采纳
#include&stdio.h&#include&stdlib.h&typedef&struct&lista{&&&&struct&lista&*&&&&int&}void&insert(list&*h);void&del(list&*h);int&main(){&&&&int&&&&&list&*head=(list&*)malloc(sizeof(list));&&&&head-&next=NULL;&&&&while(1)&&&&{&&&&&&&&printf(&/***********************************************************/\n&);&&&&&&&&printf(&请选择链表操作:\n&&1:插入\n&&2:删除\n输入数字进行选择:&);&&&&&&&&scanf(&%d&,&flag);&&&&&&&&if(flag==1)&&&&&&&&&&&&insert(head);&&&&&&&&else&if(flag==2)&&&&&&&&&&&&del(head);&&&&&&&&else&&&&&&&&&&&&printf(&输入有误,请重新选择!\n&);&&&&}}void&insert(list&*h){&&&&int&num,&&&&list&*&&&&printf(&请选择插入个数:\n&);&&&&scanf(&%d&,&num);&&&&printf(&要插入的数据:\n&);&&&&while(num--)&&&&{&&&&&&&&scanf(&%d&,&dat);&&&&&&&&list&*p=(list&*)malloc(sizeof(list));&&&&&&&&p-&next=h-&&&&&&&&&h-&next=p;&&&&&&&&p-&data=&&&&}&&&&printf(&插入后链表中的值:\n&);&&&&lh=h-&&&&&while(lh)&&&&{&&&&&&&&printf(&%d&&,lh-&data);&&&&&&&&lh=lh-&&&&&}&&&&printf(&\n\n\n&);}void&del(list&*h){&&&&int&dat,&&&&list&*&&&&printf(&请输入要删除的值:\n&);&&&&scanf(&%d&,&dat);&&&&lh=h;&&&&while(lh-&next)&&&&{&&&&&&&&if(lh-&next-&data==dat)&&&&&&&&{&&&&&&&&&&&&flag=1;&&&&&&&&&&&&lh-&next=lh-&next-&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&lh=lh-&&&&&}&&&&if(flag)&&&&{&&&&&&&&lh=h-&&&&&&&&&printf(&删除后链表中的值:\n&);&&&&&&&&while(lh)&&&&&&&&{&&&&&&&&&&&&printf(&%d&&,lh-&data);&&&&&&&&&&&&lh=lh-&&&&&&&&&}&&&&&&&&printf(&\n\n\n&);&&&&}&&&&else&&&&&&&&printf(&链表中无匹配值\n\n\n&);}
提问者评价
谢谢啦!非常感谢!
其他类似问题
为您推荐:
单链表的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1302人阅读
C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
#include&stdio.h&
#include&stdlib.h&
typedef struct node
struct node *
Linklist *create() //创建链表,带头结点
Linklist *
head=(Linklist *)malloc(sizeof(Linklist));
head-&next=NULL;
Linklist *head_insert(Linklist *head,int value) //头插法,先插的元素排在后面
Linklist *p,*t;
p=(Linklist *)malloc(sizeof(Linklist));
p-&next=t-&
t-&next=p;
Linklist *tail_insert(Linklist *head, int value) //尾插法
Linklist *p,*t;
p=(Linklist *)malloc(sizeof(Linklist));
while(t-&next!=NULL) //当链表不为空时t向后移动
t-&next=p;
p-&next=NULL;
Linklist *reverse(Linklist *head) //链表逆置
Linklist *p,*t;
p-&next=NULL;
while(t!=NULL)
t-&next=head-&
head-&next=t;
Linklist *display(Linklist *head) //打印链表数据
Linklist *p;
if(p==NULL)
printf(&linklist is empty...\n&);
while(p!=NULL)
printf(&%5d&,p-&data);
printf(&\n&);
*delete(Linklist *head,int value) //删除结点
Linklist *p,*t;
while(p-&next!=NULL)
if(p-&next-&data==value)
p-&next=t-&
Linklist *sort(Linklist *head) //链表元素排序
int i,j,t;
Linklist *p,*q;
while(p!=NULL)
for(i=0;i&n-1;i++) //冒泡排序
for(j=0;j&n-i-1;j++)
if(p-&data & q-&data)
p-&data=q-&
q-&data=t;
int main()
Linklist *
head=create();
printf(&head_insert:\n&);
for(i=1;i&20;i=i+3)
head_insert(head,i);
display(head);
printf(&linklist reverse:\n&);
reverse(head);
display(head);
printf(&tail_insert:\n&);
for(i=2;i&20;i=i+4)
tail_insert(head,i);
display(head);
printf(&delete a node:&);
scanf(&%d&,&num);
delete(head,num);
display(head);
printf(&linklist sort:\n&);
sort(head);
display(head);
Linux下的运行结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28147次
排名:千里之外
原创:33篇
转载:19篇
(2)(1)(1)(4)(19)(4)(8)(1)(2)(7)(3)遇到难题,关于链表的建立与输出?_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:333,114贴子:
遇到难题,关于链表的建立与输出?收藏
怎么把下一结点的地址存储到当前结点的指针域,如何定位链表的最后结点?问题有点2,大家见谅,最后链表内的数据信息存入到文件中是平常一样吗?
void jianlicandan(){ list * a,*b; puts("输入档案名称");
gets(danganmingcheng); while(1) { if((a=(list *)malloc(sizeof(list)))==NULL) {
puts("内存已满!");
exit(1); }
p.numble++;
if(p.head==NULL)
p.head=a; else
b-&next=a; puts("输入学生姓名"); scanf("%s",copy.name); qingchu(); puts("输入性别"); scanf("%s",&copy.xinbie); qingchu(); puts("输入8位出生年月如"); scanf("%s",copy.csny); qingchu();
puts("输入电话号码"); scanf("%s",copy.dianhua); qingchu(); puts("输入年龄"); scanf("%d",&copy.nianling); a-&stdunts= a-&next=NULL; p.end=a; b=a;
puts("输入下一个学生数据 q to quit"); qingchu(); if(getchar()=='q') {qingchu();} qingchu(); }}
typedef struct stdun{ char name[10]; char xinbie[10]; char csny[18]; char dianhua[18];}typedef struct lis{ lis *} struct
{ list * list *} p={NULL,NULL,0};
//链表://一般定义三个指针,一个头head,一个p1用来开辟空间,一个p2用来缓存。//先声明一个类(就是结构体)#include &iostream&class student{
public://数据部分
student *//用来连接下一个};//然后就是创建链表student *creat()//创建链表,链表返回指针,就是头结点head{
student *head=NULL,*p1,*p2;//定义三个指针,给head(头)赋值为空,就是指向空
p1=//给p1开辟一个新空间,用来存储数据data
head=p1;//将head(头)指向p1
p2=p1;//缓存也指向p1;
cin&&p1-&//输入数据啦,此时第一个结点,已经有一个数据了。
while(0!=p1-&data)//链表必须有一个退出条件,这里设置输入0退出{
p2=p1;//把p1的所有赋值给p2,开始p2是指向头,现在是指向刚才开辟的这个新空间p1啦。
p1=//p1又去开辟下一个空间
cin&&p1-&//给下一个空间输入内容
p2-&next=p1;//这里是连接各个节点}//注:我这里只是开辟空间,所有的空间都没有释放。p2-&next=NULL;//当你输入0就会跳出while此时表示链表完结,你需要将表尾指向NULL(空)//返回头}//好了,链表创建完成
//链表输出的话,很简单的void put(student *headput)//输出的话不要返回值{
while(NULL!=headput)//判断头已经指向表尾了,就是头一直下移,直到表尾{cout&&headput-&//输出一个数据head=head-&//表头下移一位}}int main()//当然这里是主函数{ student *//这里定义一个类(结构体)指针,用来接收创建链表时候返回的头结点headc=creat();//创建链表,接收头指针put(headc);//给输出链表一个头指针return 0;//好啦,这就是一个链表的创建和输出的全过程啦!!!}
我写的这么详细了,你应该很好看懂了!!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或不带头节点的链表头插法插入会出错,求问原因,万分感谢 ORZ
[问题点数:40分,结帖人encorezero]
不带头节点的链表头插法插入会出错,求问原因,万分感谢 ORZ
[问题点数:40分,结帖人encorezero]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2015年1月 C/C++大版内专家分月排行榜第二2012年3月 C/C++大版内专家分月排行榜第二2011年11月 C/C++大版内专家分月排行榜第二2010年6月 C/C++大版内专家分月排行榜第二2010年5月 C/C++大版内专家分月排行榜第二
2011年4月 C/C++大版内专家分月排行榜第三2011年2月 C/C++大版内专家分月排行榜第三2010年8月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 c语言链表 的文章

 

随机推荐