C语言实现单链表逆置.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
什么单链表的逆置 问题描述 设计一个程序,实现单链表的逆置。 一、需求分析 ⑴按程序提示输入并创建一个单链表,带有头结点 ⑵可自定义链表的长度,可自定义链表储存的数据类型,注意更改相应的输入输出方式 ⑶实现单链表的逆置,直观地输出结果 二、概要设计 为实现上述程序功能,需创建以下抽象数据类型: ADT LinkList { 数据对象:D={ai|ai∈(0,1,…,9),i=0,1,2,…,n,n≥0}    数据关系:R={ai-1,ai|ai-1,ai∈D,i=1,2,…,n}    基本操作:    InitList(L)    操作结果:初始化一个链表L。    CreatList(L,L_Length)    初始条件:链表L已存在。    操作结果:创建一个长度为L_Length的单链表。    InverseList(L)    初始条件:链表L已存在。    操作结果:将单链表逆置。    DisplayList(L)    初始条件:链表L已存在。 操作结果:销毁链表L。 } ADT LinkList 本程序包含四个模块,即 主程序模块,接受命令 初始化及链表创建模块,按要求创建链表 单链表逆置模块,实现单链表的逆置 显示模块,输出结果 三、详细设计(C语句,而非伪码) 元素类型、节点类型和指针类型的定义 typedef int Status;//函数状态类型 typedef int ElemType;//元素类型 typedef struct node{ ElemType data; struct node *next; }Node,*LinkList;//节点类型、 基本操作和所需调用的函数 //初始化一个链表 Status InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(node)); if(!(*L)) exit(-2);//内存分配失败 (*L)-next=NULL; return 1; } //在初始化的基础上按顺序创建一个链表 Status CreatList(LinkList L,int n) { LinkList p=L; int i; for(i=0;in;i++) { (p-next)=(LinkList)malloc(sizeof(node)); if (!(p-next)) exit(-2);//内存分配失败 scanf(%d,p-next-data); p=p-next; } p-next=NULL; return 1; } //依次输出单链表中的各个元素 Status DisplayList(LinkList L) { LinkList p; p=L-next; while(p) { printf(%5d,p-data); p=p-next; } printf(\n); return 1; } //逆置1(递归方法) LinkList Ieverse(LinkList pre, LinkList cur) { LinkList head; if(!cur) return pre; head =Ieverse(cur, cur-next); cur-next = pre; return head; } //逆置2(就地逆置) Status Ieverse(LinkList L) { LinkList last = L-next; LinkList first ; while(last-next) { first = L-next; L-next=last-next; last-next=L-next-next; L-next-next=first; } return 1; } 主函数及功能的实现 void main() { LinkList L; int L_Length; InitList(L);//初始化链表 printf(请输入单链表的长度:\n); scanf(%d,L_Length); if(L_Length 1) exit(-1);//长度不符合要求 printf(请依次输入各个元素的值:\n); CreatList(L,L_Length);//按输入数据创建链表 DisplayList(L);//显示原单链表 //L-next=Ieverse(NULL,L-next);此语句可调用递归方法实现链表的逆置// Ieverse(L);//实现单链表的就地逆置 printf

您可能关注的文档

文档评论(0)

hong333666 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档