- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)