2017年南京师范大学数据结构(同等学力加试)复试实战预测五套卷
● 摘要
一、应用题
1. 设二叉树BT 的存储结构如表:
表 二叉树BT 的存储结构
其中BT 为树根结点的指针,其值为6, Lchild 、Rchild 分別为结点的左、右孩子指针域data 为结点的数据域。试完成下列各题:
(1)画出二叉树BT 逻辑结构;
(2)写出按前序、中序、后序遍历该二叉树所得到的结点序列:
(3)画出二叉树的后序线索树。
【答案】(1)二叉树的逻辑结构如图1所示:
图1
(2)前序序列:ABCEDFHGIJ
中序序列:ECBHFDJIGA
后序序列:ECHFJIGDBA
(3):二叉树的后续线索树如图2所示:
图2
2. 一个长度为的升序序列S , 处在第「L/2」个位置的数为S 的中位数。例如,若序列Sl= (11,13, 15, 17,19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2= (2, 4, 6, 8, 20), 则S1和S2的中位数是11。现有两个等长升序序列A 和B ,试设计一个时间和空间两方面都尽可能高效的算法,找出两个序列A 和B 的中位数。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C 或C++或JA V A 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
【答案】(1)算法的基本设计思想:分别求两个升序序列A 和B 的中位数,设为a 和b 。 ① 若a=b,则a 或b 即为所求的中位数。
② 否则,若a
所在序列B 的较大一半。若a>b,中位数只能出现(b ,a )范围内,舍弃b 所在序列B 的较小一半,同时舍弃a 所在序列A 的较大一半。
③在保留的两个升序序列中求出新的中位数a 和b ,重复上述过程,直到两个序列中只含一个元素时为止,则较小者即为所求的中位数。
(2)用C 语言算法描述如下:
//分别考虑奇数和偶数,保持两个子数组元素个数相等
//若元素个数为奇数个
//舍弃A 中间点以前部分且保留中间点
//舍弃B 中间点以后部分且保留中间点
}
//若元素个数为偶数个
//舍弃A 中间点及中间点以前部分
//舍弃B 中间点以后部分且保留中间点
//若元素个数为奇数个
//舍弃A 中间点以后部分且保留中间点
//舍弃B 中间点以前部分且保留中间点
//若元素个数为偶数个
//舍弃A 中间点以后部分且保留中间点
//舍弃B 中间点及中间点以前的部分
(3)说明算法的复杂性:算法的时间复杂度、空间复杂度分别是
3. 给出一组关键字:29,18,25,47,58,12,51,10,分别写出按下列各种排序方法进行排序时的变化过程:
(1)归并排序,每归并一次书写一个次序。
(2)快速排序,每划分一次书写一个次序。
(3)堆排序,先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。
【答案】(1)2—路归并第一趟:18,29,25,47,12,58,10,51:
第二趟:18,25,29, 47,10,12,51,58;
第三趟:10,12,18,25,29,47,51,58
(2)快速排序第一趟:10,18,25,12,29,58,51,47;
第二趟:10,18,25,12,29,47,51,88;
第三趟:10,12,18,25,29,47,51,88
(3)堆排序
建大堆:58,47,51,29,18,12,25,10;
①51,47,25,29,18,12,10,58;