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

2018年北京市培养单位资源与环境学院866计算机原理[专业硕士]之数据结构考研强化五套模拟题

  摘要

一、算法设计题

1. 已知二叉树T ,试写出复制该二叉树的算法(t→T) 。

【答案】算法如下:

复制二叉树t 的非递归算法

是二叉树的结点指针的队列,容量足够大

结束本题

2. 设排序二叉树中结点的结构为下述三个域构成:

Data :给出结点数据的值;left :给出本结点的左儿子结点的地址;right :给出本结点的右儿子结点的地址。设data 域为正整数,该二叉树根结点地址为T 。现给出一个正整数x 。请编写非递归程序,实现将data 域之值小于等于x 的结点全部删除掉。

【答案】算法如下:

非递归删除以r 为根的二叉排序树

栈,容量足够大,栈中元素是二叉排序树结点的指针

沿左分枝向下

出栈,沿栈顶结点的右子树向下刪除,释放被删除结点空间

在二叉排序树T 中删除所有小于等于x

的结点

根结点的值小于等于

x

删除二叉树p ,删除持续到" 根" 结点值大于x 或T 为空树为止

沿根结点左分支向下,査小干等于x 的结点

q 记P 的双亲

结点的值小于等于

x

再査原P 的右子树中小于等于x 的结点

3. —个有向图G=(V,E) 的平方图

,使得表示。

【答案】算法如下:

4. 试将下列递归过程改写为非递归过程。

【答案】算法如下:

满足下述性质

:

当且仅当存在某个顶点

22

。写一个算法从给定的G 求出G , G 和G 可分别用两个邻接表

5. 用邻接多重表存储结构,编写FERST-ADJ(G,V) 函数,函数返回值为第一个邻接点,若V 没有邻接点,返回零。

【答案】算法如下:

在邻接多重表g 中,求v 的第一邻接点, 若存在,返回第一邻接点,否则返回

确定顶点v 在邻接多重表向量中的下标, 不考虑不存在v 的情

返回第一邻接点,

中必有一个等于

i

取第一个边结点

二、应用题

6. 用单链表保存m 个整数, 节点的结构为(data, link) , 且余绝对值相等的节点。

例如若给定的单链表head 如下表

删除节点后的head 为

要求

(1)给出算法的基本思想 (2)使用c 或

语言, 给出单链表节点的数据类型定义。

(3)根据设计思想, 采用c 或C++语言描述算法, 关键之处给出注释。 (4)说明所涉及算法的时间复杂度和空间复杂度。 【答案】(1)算法思想:

(n为正整数) 。现要求设计一个

时间复杂度尽可能高效地算法, 对于链表中绝对值相等的节点, 仅保留第一次出现的节点而删除其