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

2018年北京大学信息科学技术学院408计算机学科专业基础综合之数据结构考研仿真模拟五套题

  摘要

一、算法设计题

1. 在一个循环链队中只有尾指针(记为rear ,结点结构为数据域data ,指针域next) ,请给出这种队列的入队和出队操作的实现过程。

【答案】算法如下:

//rear是带头循环链队列的尾指针,本算法将元素X 插入到队尾

//申请结点空间

//将s 结点链入队尾

//rear指向新队尾

//rear是带头结点的循环链队列的尾指针

//本算法执行出队操作,成功输出队头元素;否则给出出错信息

//s指向队头元素

//队头元素出队

//空队列

2. 设有顺序放置的n 个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红、白、蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后。重新安排时,对每粒砾石的颜色只能察看一次,并且只允许交换操作来调整砾石的位置。

【答案】算法如下:

r 为含有n 个元素的线性表,元素是具有红、白和蓝色的砾石,用顺序存储结构存储

本算法对其排序,使所有红色栎石在前,白色居中,蓝色在最后

当前元素是红色

当前元素是白色

当前元素是蓝色

3. 已知关键字序列(

试写出一算法将(

利用(1)的算法写一个建大根堆的算法。 【答案】(1)算法如下:

''

假设

是大堆,本算法把

(2)

4. 已知深度为h 的二叉树,以一维数组应的算法。

【答案】算法如下:

计算深度为h 、以一维数组BT 作为其存储结构的二叉树的叶结点数,n 为数组长度

记叶结点数

若结点无孩子,则

是叶子

存储在数组后一半的元素是叶结点

5. 设从键盘输入一整数的序列:a 1,a 2,a 3,... ,a n ,试编写算法实现:用栈结构存储输入的整数,

时,将

入栈;当

时,输出栈顶整数并出栈。算法应对异常情况(入栈满等) 给

出相应的信息。

【答案】算法如下

:

栈空间容量

//s是元素为整数的栈,本算法进行入栈和出栈操作

//top为栈顶指针,定义top =0时为栈空

) 是大根堆。

) 调整为大根堆;

调成大堆

作为其存储结构,试编写一算法,求该二叉

树中叶结点的个数,为简单起见,设二叉树中元素结点为非负整数,要求写出算法基本思想及相

//n个整数序列进行处理

//从键盘读入整数序列

//读入的整数不等于﹣1时人栈

//读入的整数等于﹣1时出栈

//算法结束。

二、应用题

6. 设度为m 的树采用多重链表存储。每个结点有m+1个域,其中有1个数据域,m 个指向孩子的指针。则空指针的数目是多少? 说明这种存储方式的利弊。

【答案】(1)空指针数目:n(n>0)个结点的m 度树共有nm 个链域,除根结点外,每个结点均有一个指针所指,故该树的空链域有

+1个。

(2)利弊:这种存储结构统一,便于处理但空链域造成存储效率低。

7. 设将n(n>l)个整数存放到一维数组R 中. 试设计一个在时间和空间两方面都尽可能高效的算法,将R 中存有的序列循环左移P(0

中的数据由

. 要求:

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

(2)根据设计思想,采用C 或C++或JA V A 语言描述算法,关键之处给出注释. (3)说明你所设计算法的时间复杂度和空间复杂度. 【答案】(1)算法的基本设计思想:先将n 个数据由得到最终得到结果

(2)用C 语言算法描述如下:

变换为

原地逆置,

然后

再将数组R 中的前,ti-P 个数和后P 个数分别原地逆置,