当前位置:问答库>考研试题

2017年杭州师范大学数据结构(同等学力加试)复试实战预测五套卷

  摘要

一、应用题

1. 试证明:同一棵二叉树的所有叶结点,在前序序列、对称序序列以及后序序列中都按相同的

,例如前序后序运对称序。 相对位置出现(即先后顺序相同)

,中序遍历是“左根右”,后序遍历是“左右根”【答案】前序遍历是“根左右”。三种遍历中

只是访问 " 根”结点的时机不同,对左右子树均是按左右顺序来遍历的,因此所有叶子都按相同的相对位罝出现。

2. 阅读下列算法,指出算法A 的功能和时间复杂性。

【答案】功能:将原单循环链表分解成两个单循环链表:其一包括结点h 到结点g 的前驱结点;另一个包括结点g 到结点h 的前驱结点。

时间复杂度:0(n )。

3. 请写出应填入下列叙述中( )内的正确答案。

排序有各种方法,如插入排序、快速排序、堆排序等。

设一数组中原有数据如下:15,13,20,18,12,60。下面是一组用不同排序方法进行一遍排序后的结果。

( )排序的结果为:12,13,15,18,20,60

( )排序的结果为:13,15,18,12,20,60

( )排序的结果为:13,15,20,18,12,60

( )排序的结果为:12,13,20,18,15,60

【答案】①快速排序②起泡排序③直接插入排序④堆排序

4.

已知一个整数序列

其中

则称x 为A 的主元素。

例如若存在

且则称5为主元素;

又如

则A 中没有主元素。假设A 中的n 个元素保存在一个一维数组中,请设计一个

尽可能高效的算法,找出A 的主元素。若存在主元素,则输出该元素;否则输出-1。要求:

(1)给出算法的基本设计思想。

(2)根据设计思想,采用C 或

【答案】 或Java 语言描述算法,关键之处给出注释。 (3)说明你所设计算法的时间复杂度和空间复杂度。

(1)算法的策略是从前向后扫描数组元素,标记出一个可能成为主元素的元素Num 。然后重新计数,确认Num 是否是主元素。

算法可分为以下两步:

①选取候选的主元素:依次扫描所给数组中的每个整数,将第一个遇到的整数Num 保存到c 中,记录Num 的出现次数为1; 若遇到的下一个整数仍等于Num ,则计数加1否则计数减1; 当计数减到0时,将遇到的下一个整数保存到c 中,计数重新记为1,开始新一轮计数,即从当前位置开始重复上述过程,直到扫描完全部数组元素。

②判断c 中元素是否是真正的主元素,再次扫描该数组,统计c 中元素出现的次数,若大于则为主元素;否则,序列中不存在主元素。

(2)算法实现如下:

用来保存候选主元素,count 用来计数

设置A [0]为候选主元素

查找候选主元素

为A 中的候选主元素计数

处理不是候选主元素的情况

更换候选主元素

统计候选主元素的实际出现次数

确认候选主元素

不存在主元素

,空间复杂度为O (1)(3)时间复杂度为O (n )。

5. 假设计算机系统采用CSCAN (循环扫描)磁盘调度策略。使用2KB 的内存空间记录16384个磁盘块的空闲状态。

(1)请说明在上述条件下如何进行磁盘空闲状态的管理。

(2)设某单面磁盘旋转速度为每分钟6000转,每个磁道有100个扇区,相邻磁道间的平均移动时间为lms 。若在某时刻,磁头位于100号磁道处,并沿着磁道号增大的方向移动(如下图

,所示)磁道号请求队列为50, 90, 30, 120, 对请求队列中的每个磁道需要读取1个随机分布的扇区,则读完这4个扇区总共需要多少时间? 要求给出计算过程。

SSD 等),(3)如果将磁盘替换为随机访问的FLash 半导体存储器(如U 盘、是否有比CSCAN

更高效的磁盘调度策略? 若有,给出磁盘调度策略的名称并说明理由;若无,说明理由。

【答案】(1)采用位示图法管理磁盘空闲块,每一位表示一个磁盘块的状态,共需要16384/32=512个字节即2KB 的空间,正好可放在系统提供的内存中。

(2)采用CSCAN 调度算法,访问磁道的顺序和移动的磁道数如下表所示:

故移动的磁道数为20+90+20+40=170, 所花的时间为170ms 。由于转速为

花的时间为0.4ms 。综上所述,读取磁道上所有扇区所花的总时间为

考虑寻道时间和旋转延迟,可直接按

请求的先后顺序服务。 则平均旋 转延迟为5ms ,总的旋转延迟时间为20ms ,读取一个扇区的平均时间为0.1ms , 故读取4个扇区所(3)采用先来先服务(FCFS )调度策略更高效,因为Flash 半导体存储器的物理结构不需要