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

2017年东北师范大学数据结构(同等学力加试)复试仿真模拟三套题

  摘要

一、应用题

1. 在二叉树的Llink-Rlink 存储表示中,引入“线索”的好处是什么?

【答案】在二叉链表表示的二叉树中,引入线索的目的主要是便于査找结点的前驱和后继,因为若知道各结点的后继,二叉树的遍历就非常简单。利用二叉链表结构查结点的左右子女非常方便. 但其前驱和后继是在遍历中形成的。为了将非线性结构二叉树的结点排成线性序列,利用结点的空链域,左链为空时作为前驱指针,右链为空时作为后继指针。再引入左右标记ltag 和rtag ,规定:当ltag=0时,lchild 指向左子树,当ltag=1时,lchild 指向前驱:当rtag=0时,rchild 指向右子树,当rtag=l时,rctiild 指向后继。这样,在线索二叉树(特别是中序线索二叉树)上遍历就消除了递归,也不使用栈(利用后序线索二叉树査后扔继续要栈)。 2. 假定某计算机的CPU 主频为80MHz , CPI为4, 并且平均每条指令访存1.5次,主存与Cache 之间交换的块大小为168, Cache的命中率为

存储器总线宽度为32位。请回答下列问题。

(1)该计算机的MIPS 数是多少? 平均每秒Cache 缺失的次数是多少? 在不考虑DMA 传送的情况下,主存带宽至少达到多少才能满足CPU 的访存要求?

(2)假定在Cache 缺失的情况下访问主存时,存在期挪用方式,磁盘

接口的数据缓冲寄存器为32位,则磁盘

的缺页率,则CPU 平均每秒产

接口平均每秒发出的DMA

生多少次缺页异常? 若页面大小为4KB ,每次缺页都需要访问磁盘,访问磁盘时DMA 传送采用周请求次数至少是多少?

(3)CPU 和DMA 控制器同时要求使用存储器总线时,哪个优先级更高? 为什么? (4)为了提高性能,主存采用4体交叉存储模式,工作时每每个体的存储周期为50ns ,则该主存能提供的最大带宽是多少?

【答案】

(1)平均每秒CPU 执行的指令数为:平均每秒Cache 缺失的次数为:为

足CPU 的访存要求。

(2)平均每秒钟“缺页”异常次数为:故平均每秒磁盘DMA 请求的次数至少为:请求得不到及时响应,

传输数据可能会丢失。

个存储周期启动一个体。若

故MIPS 数为20; =300000;

才能满

当Cache 缺失时,CPU 访问主存,主存与Cache 之间以块为单位传送数据,此时,主存带宽

在不考虑DMA 传输的情况下,主存带宽至少达到

因为存储器总线宽度为32位,所以,每传送32位数据,磁盘控制器发出一次DMA 请求,CPU 和DMA 控制器同时要求使用存储器总线时,DMA 请求优先级更高;因为若DMA (3)

(4)4体交叉存储模式能提供的最大带宽为:

3. 数据类型和抽象数据类型是如何定义的? 二者有何相同和不同之处? 抽象数据类型的主要特点是什么? 使用抽象数据类型的主要好处是什么?

【答案】(1)数据类型的定义

数据类型是程序设计语言中的一个概念,它是一个值的集合和操作的集合。如c 语言中的整,其操作有加、减、乘、除、型、实型、字符型等。整型值的范围(对具体机器都应有整数范围)求余等。实际上数据类型是厂家提供给用户的已实现了的数据结构。

(2)抽象数据类型的定义

“抽象数据类型(ADT )”指一个数学模型及定义在该模型上的一组操作。“抽象”的意义在于数据类型的数学抽象特性。抽象数据类型的定义仅取决于它的逻辑特性,而与其在计算机内部 如何表示和实现无关。无论其内部结构如何变化,只要它的数学特性不变就不影响它的外部使用。

(3)两者的不同

抽象数据类型和数据类型实质上是一个概念。此外,抽象数据类型的范围更广,它已不再局限于机器已定义和实现的数据类型,还包括用户在设计软件系统时自行定义的数据类型。

(4)抽象数据类型的主要特点

,而是向“科学”迈进了一步。 抽象数据类型的出现使程序设计不再是“艺术”(5)使用抽象数据类型的好处

使用抽象数据类型定义的软件模块含定义、表示和实现三部分,封装在一起,对用户透明(提,而不必了解实现细节。 供接口)

4. 设目标为

模式为

(1)计算模式p 的nextval 函数值;

(2)不写出算法,只画出利用KMP 算法进行模式匹配时每一趟的匹配过程。 【答案】(1)P 的nextval 函数值为0110132(P 的next 函数值为0111232)。 (2)利用KMP (改进的nextval )算法,每趟匹配过程如下: 第一趟匹配:abcab (i=5, j=5) 第二趟匹配:abc (i=7,j=3) 第三趟匹配:a (i=7,j=l) 第四趟匹配:

(成功)abcabaa (i=15,j=8)

5. 请回答下列关于堆(Heap )的一些问题:

(1)堆的存储表示是顺序的还是链接的?

(2)设有一个最小堆,即堆中任意结点的关键码均不大于它的左子女和右子女的关键码。其具有最大值的元素可能在什么地方?

(3)对n 个元素进行初始建堆的过程中,最多做多少次数据比较(不用大0表示法)? 【答案】(1)堆的存储是顺序的。

(2)最大值元素一定是叶结点,在最下两层上。

(3)在建含有n 个元素、深度为h 的堆时,其比较次数不超过4n ,推导如下: 由于第i 层上的结点数至多是

以它为根的二叉树的深度为

则调用

次筛选算

法时总共进行的关键字比较次数不超过下式之值:

6. 一个长度为

的升序序列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 语言算法描述如下: