有序表的合并的标准实验报告课件.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件工程专业类课程 实 验 报 告 课程名称: 学院专业: 学生姓名: 学 号: 指导教师: 日 期: 电子科技大学计算机学院实验中心 电 子 科 技 大 学 实 验 报 告 一、实验室名称: 二、实验项目名称: 有序单链表的合并 三、实验原理: 合并单链表算法的思想描述, 因这是本实验重点, 这里老是就不写了。 四、实验目的: 1. 掌握带头结点的单链表建立,插入,删除,查找等基本操作的设 计与实现 2. 通过单链表的排序编程理解单链表与顺序表操作的区别与联系 3. 理解单链表对集合操作的实现 4. 掌握有序集合合并的算法设计与存储结构的关系,及时空复杂度 与算法性能的关系 五、实验内容: 1. 编程实现建立单链表的操作 2. 编程实现单链表的排序 3. 编程实现用单链表合并有序表,使得合并结果有序,但是要求不 额外增加内存空间存放合并后的数据,时间开销尽量少 六、实验器材(设备、元器件) : 电脑 1 台; XP 或者 windows 7 操作系统 Visual studio 2010开发环境 七、实验步骤: 1. 项目分析与概要设计 (1)输入:第一个单链表长度 第一个单链表的所有数据 第二个单链表长度 第二个单链表的所有数据 (2)输出:2 个有序单链表合并成一个有序表 (3)算法分析与概要设计: a). 实现两个有序单链表的合并,首先要保证输入的单链表有 序,因此要判断单链表是否有序,如果无序,要先重新对单链表 进行排序,然后才能够做合并操作。 b). 因为单链表合并后不能增加额外空间,所以原来单链表的 结点要串连到新的合并后的单链表中,原来的单链表合并后将不 再存在。原来的单链表有 2 个头结点,合并后只有一个单链表, 因此有一个头结点将被释放。这里选择 A 集合的头结点为合并后 的头结点,而原来 B 集合的头结点将被释放。 合并有序单链表的算法流程图见图 1 所示。 开始 输入链表 A 的长度和数 据到 La中 输入链表 B 的长度和数 据到 Lb中 N La有序? La排序 Y N Lb有序? Lb排序 Y 合并La=La+Lb ,使 得合并后的 La仍然 有序 输出合并后的结果 结束 图1 有序单链表的合并的概要设计流程图 2. 数据结构与详细设计 (1)数据结构 采用带头结点的单链表存储数据,结点结构如下: struct node { int value; struct node * next; }; typedef struct node Node; typedef struct node *ptrList,*List; (2)详细设计 根据概要设计流程图,需要实现如下功能: 建立带头结点的单链表;判断单链表是否有序;单链表排序;合并有 序表使其仍然有序; 打印输出单链表的所有数据。 下面对这些功能进 行详细设计 ( 这里只演示判断单链表是否有序的详细设计过程 ,余下 的请同学们自己完成 ) a). 建立带头结点的单链表; b). 判断单链表是否有序; 输入:带头结点的单链表 输出:单链表有序,返回 1;单链表无序,返回 0 算法思想描述:从第二个元素结点开始,与直接前趋比较,如果比直 接前趋结点元素值小, 则返回无序 (0);否则,访问下一个元素结点。 如果直到单链表访问结束, 所有元素都大于等于直接前趋, 则该单链 表是有序表,返回真( 1)。算法详细设计流程图见图 2 所示。 开始 输入参数是指向 单链表头结点的 头指针 La 单链表是否有序变量 bSorted=true; 工作指针 p=La-next; Y P==NULL? N 工作指针 q=p-next; Y q==NULL? N 访问下一个结点: p=q; q=q-next; Y p-dataq-data? N nSorted=false; 返回bSorted 图2 判断单链表是否有序的详细设计流程图 c). 单链表排序; d). 合并有序表使其仍然有序; e). 打印输出单链表的所有数据 3. 源代码 主程序和其他几个功能的源代码这里省略了,只演示如何根据图 2 的详细设计流程图写源代码 b). 判断单链表是否有序源代码; int JudgeListSorted(List header) { ptrList p,q; int bSorted=1; p=header-next; if (p==NULL) return bSorted; q=p-next; while (q bSorted==1) { if (p-dataq-data) { p=q; q=q-next; } else { bSorted=0; } } return bSorted; } 八、实验数据及结果分析: 程序测试输入数据分别为下面几种情况: 1. 2 个链表都不空,但

文档评论(0)

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

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

1亿VIP精品文档

相关文档