一、实验目的和要求
目的:两个表合并成一个有序表。要求设计两种以上储存方式、两种以上处理流程方式。分析各代码性能。
要求:
- 抽象数据类型独立实现。
- 其它要求同作业-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 |