单向链表操作详解

单向链表操作详解

ID:13893424

大小:86.00 KB

页数:17页

时间:2018-07-24

单向链表操作详解_第1页
单向链表操作详解_第2页
单向链表操作详解_第3页
单向链表操作详解_第4页
单向链表操作详解_第5页
资源描述:

《单向链表操作详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、/*===============================================作者:rerli时间:2003-12-05目的:学习单向链表的创建、删除、插入(无序、有序)、输出、排序(选择、插入、冒泡)、反序说明:编译没有任何错误,能生成EXE文件。这个程序TC2.0中编译生成的EXE文件,在运行输入节点时出现以下错误(TC2.01中没有任何错误):scanf:floatingpointformatsnotlinkedAbnormalprogramtermination即:structstudent中floatscore字段在输入时,它不认flo

2、at数格式,而改为longscore却可以正常运行。但是在TC2.01中floatscore重新编译、链接、运行很正常。因此,我认为这是TC2.0在结构类型中的Bug.================================================*//*单向链表的图示:---->[NULL]head图1:空链表---->[p1]---->[p2]...---->[pn]---->[NULL]headp1->nextp2->nextpn->next图2:有N个节点的链表*/#include#include#def

3、ineNULL0#defineLENsizeof(structstudent)structstudent{longnum;/*学号*/floatscore;/*分数,其他信息可以继续在下面增加字段*/structstudent*next;/*指向下一节点的指针*/};intn;/*节点总数*//*==========================功能:创建节点返回:指向链表表头的指针==========================*/structstudent*Create(){structstudent*head;/*头节点*/structstudent*p

4、1=NULL;/*p1保存创建的新节点的地址*/structstudent*p2=NULL;/*p2保存原链表最后一个节点的地址*/n=0;/*创建前链表的节点总数为0:空链表*/p1=(structstudent*)malloc(LEN);/*开辟一个新节点*/p2=p1;/*如果节点开辟成功,则p2先把它的指针保存下来以备后用*/if(p1==NULL)/*节点开辟不成功*/{printf("Cann'tcreateit,tryitagaininamoment!");returnNULL;}else/*节点开辟成功*/{head=NULL;/*开始hea

5、d指向NULL*/printf("Pleaseinput%dnode--num,score:",n+1);scanf("%ld,%f",&(p1->num),&(p1->score));/*录入数据*/}while(p1->num!=0)/*只要学号不为0,就继续录入下一个节点*/{n+=1;/*节点总数增加1个*/if(n==1)/*如果节点总数是1,则head指向刚创建的节点p1*/{head=p1;/*注意:此时的p2就是p1,也就是p1->next指向NULL。这样写目的是与下面else保持一致。*/p2->next=NULL;}else{p2->next=

6、p1;/*指向上次下面刚开辟的节点*/}p2=p1;/*把p1的地址给p2保留,然后p1去产生新节点*/p1=(structstudent*)malloc(LEN);printf("Pleaseinput%dnode--num,score:",n+1);scanf("%ld,%f",&(p1->num),&(p1->score));}p2->next=NULL;/*此句就是根据单向链表的最后一个节点要指向NULL*/free(p1);/*释放p1。用malloc()、calloc()的变量都要free()*/p1=NULL;/*特别不要忘记把释放的变量清空置为NUL

7、L,否则就变成"野指针",即地址不确定的指针。*/returnhead;/*返回创建链表的头指针*/}/*===========================功能:输出节点返回:void===========================*/voidPrint(structstudent*head){structstudent*p;printf("Now,These%drecordsare:",n);p=head;if(head!=NULL)/*只要不是空链表,就输出链表中所有节点*/{printf("headis%o",head);/*输出头指

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。