




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单链表逆置 题目:创建一个单链表并且逆置单链表 完成日期:2014-09-17一、需求分析 1、有一个单链表的第一个结点指针为head,编写一个函数将该单链表逆置,即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点。在逆置中不能建立新的单链表.2、 程序执行的命令包括:(1)创建第一个单链表;(2)逆位序输入n个元素的值,建立带表头节点的单链线性表L; (3)逆置链表设置头结点由指向第一个结点改成指向最后一个结点;(4)输出销毁。 3、测试数据 输入: 10 9 8 7 6 5 4 3 2 1二、概要设计1、 链表的抽象数据类型定义为: typedef struct LNode int data; struct LNode* next; LNode, *LinkList;/* 创建一个链表*/void CreateList_1(LinkList *L, int n) /*逆位序输入n个元素的值,建立带表头节点的单链线性表L*/int i;LNode* p = NULL;*L = (LinkList)malloc(sizeof(LNode);(*L)-next = NULL; /*先建立一个带头结点的单链表*/for (i = n; i 0; -i)p = (LinkList)malloc(sizeof(LNode); /*生成新结点*/scanf(%d, &(p-data);p-next = (*L)-next;(*L)-next = p; 2、本程序包含五个模块:(1)主程序模块:void main()定义头结点;创建一个链表;输出;逆置;输出;销毁;(2)逆位序输入n个元素的值,建立带表头节点的单链线性表L(3)先建立一个带头结点的单链表在生成新结点;(4)输出链表数据,逆置链表,设置头结点由指向第一个结点改成指向最后一个结点;(5)把结点1的指针域设置为NULL,最后返回L。 三、详细设计1、定义头文件 #include #include 2、 类型定义,类型声明typedef struct LNodeint data;struct LNode* next;LNode, *LinkList;3、创建链表 void CreateList_1(LinkList *L, int n)/*逆位序输入n个元素的值,建立带表头节点的单链线性表L*/int i;LNode* p = NULL;*L = (LinkList)malloc(sizeof(LNode);(*L)-next = NULL; /*先建立一个带头结点的单链表*/for (i = n; i 0; -i)p = (LinkList)malloc(sizeof(LNode); /*生成新结点*/scanf(%d, &(p-data);p-next = (*L)-next;(*L)-next = p;/* 创建一个链表 2*/LinkList CreateList( int n)/*逆位序输入n个元素的值,建立带表头节点的单链线性表L*/int i;LNode* p = NULL, *L=NULL;L = (LinkList)malloc(sizeof(LNode);L-next = NULL; /*先建立一个带头结点的单链表*/for (i = n; i 0; -i)p = (LinkList)malloc(sizeof(LNode); /*生成新结点*/scanf(%d, &(p-data);p-next = L-next;L-next = p;return L;/* 输出链表数据 */void out_list(LinkList L)LinkList p = NULL;p = L-next;/*这里L是带头结点的链表,所以p指向第一个数据结点*/while (p != NULL)printf(%d , p-data);p = p-next;printf(n);4、 逆置链表 LinkList reverse_List(LinkList L)LinkList p, q, r;/* 如果链表为空或者只有一个元素,直接返回该链表*/if (L-next = NULL | L-next-next=NULL)return L;/*如何不为空,把所有结点的指针域由后指变成前指,如链表1-2-3-4的指针,变成1-2-3头结点-1-2-3-4-5-*/p = L -next; /*p指向1*/q = L-next-next;/*q指向2*/while(q != NULL)r = q-next;/*r指向3,作为一个临时变量,防止指针断链*/q-next = p;/*开始反向指向前继元素: 14,别忘了这里r指向3,防止3后面的结点丢失*/p = q;/*处理下一个*/q = r;/*设置头结点由指向第一个结点改成指向最后一个结点*/L-next-next = NULL;/*把结点1的指针域设置为NULL*/L-next = p;/*最后返回L*/return L;/*主函数*/void main()LinkList head = NULL;int n =10;/*创建一个链表*/head=CreateList( n);/*输出*/out_list(head);/*逆置*/head=reverse_List(head);/*输出*/out_list(head);system(pause);四、调试分析1、在创建一个单链表并且建立带表头节点的单链线性表L,这样采用指针就能迅速存入数据,再逆位输出数值。 2、在逆置中不能建立新的单链表,这里就要求生成一个新结点。3、逆置链表时,如果链表为空或者只有一个元素,直接返回该链表。何不为空,把所有结点的指针域由后指变成前指,如链表1-2-3-4的指针,变成1-2-3头结点-1-2-3-4-5- ,r = q-next; 指向作为一个临时变量,防止指针断链 q-next = p; 开始反向指向前继元素: 14,别忘了这里r指向,防止后面的结点丢失 p = q;处理下一个 。4、逆置完成:设置头结点由指向第一个结点改成指向最后一个结点,L-next-next = NULL;把结点1的指针域设置为NULL,L-next = p;最后返回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年小学教师资格考试试卷及答案
- 2025年体育教育专业实习考试试题及答案
- 2025年图书馆学与信息科学基础理论考试卷及答案
- 2025年软件工程与项目管理考试试题及答案
- 光电转换机制-洞察及研究
- 2025年创新创业与市场分析知识测试试卷及答案
- 2025年法律经济学硕士研究生入学考试试题及答案
- 物业公司参观学习心得体会
- 2024年度浙江省二级造价工程师之建设工程造价管理基础知识能力提升试卷B卷附答案
- 幼儿园蒙氏培训
- 湖北省部分学校2023-2024学年高二下学期期末考试地理试题
- 基于大数据的公路运输碳排放评估与控制
- 叙事护理学智慧树知到期末考试答案章节答案2024年中国人民解放军海军军医大学
- 工业机器人系统操作员国家职业技能考核标准(2023年版)
- 上海学前教育学院附属青浦第二实验幼儿园新生入园登记
- 卡前列素氨丁三醇在产后出血的的应用课件
- 固废危废培训课件
- 水库安保服务方案
- 一例ANCA相关性血管炎患者的护理查房
- 《外科微创技术》课件
- 如何建立与客户良好的关系
评论
0/150
提交评论