一、实验目的和要求
目的:两个表合并成一个有序表。要求设计两种以上储存方式、两种以上处理流程方式。分析各代码性能。
要求:
- 抽象数据类型独立实现。
- 其它要求同作业-01要求。
二、实验环境
软件环境:
visual stdio 2017
硬件环境:
①CPU:Intel(R)Core(TM)i7-8565U CPU @1.80Ghz
②内存:8.0GB
三、实验内容
设计2种不同存储方式的线性表,对于每种线性表,随机给定2个表,用2种方式合并成为一个有序表(一种是先合并再排序,一种是先排序再合并)。
四、实验过程
4.1 任务定义和问题分析
解决该问题的关键在于如何自行定义一个线性表,剩下的合并的核心操作只在于排序。
4.2 数据结构的选择和概要设计
第一种存储结构:数组
第二种存储结构:链表
第一种合并方法:创建一个空表,依次将两个表中元素加入其中,最后进行由小到大排序
第二种合并方法:先将2个表排序,再通过比较,每次取其中最小的元素加入到空表中,直到元素取完,这就类似于归并排序的操作。
4.3 详细设计
线性表定义成一个模板类,其私有成员为T a【100】(Node<T>*front,rear) 以及长度int length。
公有成员为每种表对应的构造函数(以链表为存储结构的线性表多写一个析构函数),int getlength();void push(T element);void insert(int index,T element),void pop();void deleteelement(int index);
这些函数在传入数据不合法和表为空删除元素时,会触发cstlib中的exit()函数,使程序终止。
最后是定义一个运算符重载函数 T & operator [](int index),用来返回线性表中第index个元素,这里需要注意的是返回值需要引用返回,否则无法进行后续的根据索引进行排序。
五、测试及结果分析
5.1 实验数据
为保证数据中有重复,且直接合并后不是有序,选取的数据为
| 线性表1 | 线性表2 | 合并之后的表 |
|---|---|---|
| 1,3,5 | 0,2,4,6,8,5 | 0,1,2,3,4,5,5,6,8 |
| 1,3,7,5 | 0,2,4,6,8,5,3 | 0,1,2,3,3,4,5,5,6,7 |

这篇实验报告探讨了如何将两个线性表合并成有序表,涉及数组和链表两种存储方式。实验中,先合并再排序和先排序再合并的方法被比较,分析了它们的时间复杂度。报告指出,链表在删除和插入操作上的优势,而数组在直接访问元素上的高效。第二种排序方法(先排序再合并)的时间复杂度在最坏情况下仍优于第一种(合并后排序)。
最低0.47元/天 解锁文章
399

被折叠的 条评论
为什么被折叠?



