C语言实现单链表逆置
更新时间:2024-03-26 21:36:01 阅读量: 综合文库 文档下载
什么单链表的逆置
问题描述
设计一个程序,实现单链表的逆置。
一、需求分析
⑴按程序提示输入并创建一个单链表,带有头结点 ⑵可自定义链表的长度,可自定义链表储存的数据类型,注意更改相应的输入输出方式 ⑶实现单链表的逆置,直观地输出结果
二、概要设计
为实现上述程序功能,需创建以下抽象数据类型:
ADT LinkList {
数据对象:D={ai|ai∈(0,1,…,9),i=0,1,2,…,n,n≥0} 数据关系:R={|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
本程序包含四个模块,即 1) 主程序模块,接受命令
2) 初始化及链表创建模块,按要求创建链表 3) 单链表逆置模块,实现单链表的逆置 4) 显示模块,输出结果
三、详细设计(C语句,而非伪码)
1. 元素类型、节点类型和指针类型的定义
typedef int Status;//函数状态类型
typedef int ElemType;//元素类型
typedef struct node{
ElemType data; struct node *next;
}Node,*LinkList;//节点类型、
2. 基本操作和所需调用的函数
//初始化一个链表
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;i (p->next)=(LinkList)malloc(sizeof(node)); if (!(p->next)) exit(-2);//内存分配失败 scanf(\ p=p->next; } p->next=NULL; return 1; } //依次输出单链表中的各个元素 Status DisplayList(LinkList L) { LinkList p; p=L->next; while(p) { printf(\ p=p->next; } printf(\ 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; } 3. 主函数及功能的实现 void main() { LinkList L; int L_Length; InitList(&L);//初始化链表 printf(\请输入单链表的长度:\\n\ scanf(\ if(L_Length < 1) exit(-1);//长度不符合要求 printf(\请依次输入各个元素的值:\\n\ CreatList(L,L_Length);//按输入数据创建链表 DisplayList(L);//显示原单链表 //L->next=Ieverse(NULL,L->next);此语句可调用递归方法实现链表的逆置// Ieverse(L);//实现单链表的就地逆置 printf(\ DisplayList(L);//显示逆置后的链表 } 四、调试分析 本程序的基本框架比较简单,整个运行过程主要分为五个部分:主程序模块(接受链表的信息)->创建链表模块(初始化链表,即创建一个仅含头结点的空链表;按主程序模块接受的元素信息创建链表)->输出单链表模块(按一定格式输出原始链表) ->单链表逆置模块(可通过两种方式实现)->输出链表模块(按一定格式输出逆置后的链表)。 对于单链表的逆置,我想到了两种方法来实现。第一种为递归的方式,但在每一次递归调用时均需创建一个额外的节点,因此空间利用率较低,算法效率低,同时对于参数的传入也应特别小心;第二种方式为就地逆置,需要额外的两个辅助节点,时间复杂度为 O(L_Length),相比递归算法更为高效。 开始编写程序时,混淆了一些函数参数的确定,对于传值和传址地方的概念区分的不清楚,导致调试程序是花费了很多的时间。今后应重视对参数的属性的区分和认识。 五、用户使用说明 按照程序提示精心操作即可。 六、测试结果 测试时采用的数据类型为整形,若要使用其他数据类型,更改相应的输入输出语句即可。测试结果如下: ⑴请输入单链表的长度: 3 请依次输入各个元素的值: 4 7 9 4 7 9 After reversing! 9 7 4 Press any key to continu ⑵请输入单链表的长度: 6 请依次输入各个元素的值: 4 9 3 6 12 34 4 9 3 6 12 After reversing! 34 12 6 3 9 Press any key to continue ⑶请输入单链表的长度: 12 请依次输入各个元素的值: 1 3 5 7 9 2 4 6 8 10 13 15 1 3 5 7 9 2 4 6 8 10 13 15 After reversing! 15 13 10 8 6 4 2 9 7 5 3 1 Press any key to continue 经过三组不同的数据测试,程序基本能够实现设计要求。 测试时采用的数据类型为整形,若要使用其他数据类型,更改相应的输入输出语句即可。测试结果如下: ⑴请输入单链表的长度: 3 请依次输入各个元素的值: 4 7 9 4 7 9 After reversing! 9 7 4 Press any key to continu ⑵请输入单链表的长度: 6 请依次输入各个元素的值: 4 9 3 6 12 34 4 9 3 6 12 After reversing! 34 12 6 3 9 Press any key to continue ⑶请输入单链表的长度: 12 请依次输入各个元素的值: 1 3 5 7 9 2 4 6 8 10 13 15 1 3 5 7 9 2 4 6 8 10 13 15 After reversing! 15 13 10 8 6 4 2 9 7 5 3 1 Press any key to continue 经过三组不同的数据测试,程序基本能够实现设计要求。
正在阅读:
C语言实现单链表逆置03-26
第14章 遗传病诊断05-03
初一年上信息技术教案12-24
海南省2017年上半年临床助理医师病理学:细胞死亡时的形态改变考试试卷11-29
福禄贝尔教具恩物简介 - 图文09-23
汽轮机复习题2(3)05-31
2016辽宁公务员考试申论备考:材料为王 抄中有“超”05-27
军训会操评比方案03-27
2018年中国制造业的困难01-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 单链
- 语言
- 实现
- 五年级下(5-8)单测题石湖英语
- 2019年四年级英语下册 Unit 2 Lesson 10 First second third学案
- 品味经典感受山水之美21古诗两首
- 环境影响评价
- 卓越的现场管理 5S推行实务
- 2011年专升本试题
- 江苏省苏州市2016届中考数学模拟试卷(二)含答案解析
- 长征胜利82周年党课讲稿(从红军长征历程看共产党人的信仰追求)
- 中考数学压轴题(五)平移问题
- 海湾GST-DJ6327B Y 联网器安装使用说明书V1.02
- 小额贷款公司档案管理制度--16.01.13
- 我国中小企业的融资问题及解决途径
- 屯溪幼儿园幼儿园廉政风险防控机制实施方案
- 开发成本 明细科目
- 译林版英语六年级上册Unit1测试题
- 纯液体饱和蒸汽压的测定 - 静态法(华南师范大学物化实验)
- 18春福师《幼儿心理卫生与辅导》在线作业二
- 2017-2022年中国仓储物流市场深度分析与投资发展前景趋势研究报
- 基于matlab产生gold序列课程设计报告
- 2015年5月院感主题月知识竞赛复习题2