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

2018年北京信息科技大学计算机学院408计算机学科专业基础综合之数据结构考研核心题库

  摘要

一、算法设计题

1. 试设计一个C 语言算法(或C 语言程序) :用单链表做存储结构,以回车符为结束标志,输入一个任意长度的字符串,然后判断该字符串是否为“回文”(正向读和反向读时,串值相同的字符串称为“回文”) ,输出信息“Yes ”或“NO ”;最后删除字符串并释放全部空间。例如:

若输入“ABCD12321DCBA”是回文,则输出“Yes”; 若输入“ABCD123DCBA”,不是回文,则输出“NO”。

要求:定义相关数据类型,不得使用数组(顺序表) 做字符串的存储结构和辅助存储空间。假定字符串的长度为n ,试分析上述算法的时间复杂度。

【答案】算法如下:

//本算法判断数据域为字符且长为n 的单链表是否是”回文" ,返回1或0表示成功或失败

//字符栈,容量足够大

//设链表带头结点

//前一半字符入栈,链表指针后移

//若链表有奇数个结点,则跳过中间结点

//不是回文

2. 写出算法,求出中序线索二叉树中给定值为X 的结点之后继结点,返回该后继结点的指针。线索树中结点结构为;

。其中,data 存放结点的值;lc 、rc 为指向左、

右孩子或该结点前驱、后继的指针,ltag 、rtag 为标志域,若值为0, 则lc 、rc 为指向左、右孩子的指针;若值为1,则lc 、rc 为指向其前驱、后继结点的指针。

【答案】算法如下:

先在带头结点的中序线索二叉树T 中査找给定值为x 的结点,假定值为x 的结点存在

设P 指向二叉树的根结点

结束

在中序线索二叉树T 中,, 求给定值为x 的结点的

后继结点

首先在T 树上査找给定值为x 的结点,由p 指向

' 若P 的右标志为1, 则P 的rc 指针指向其后继

结点P 的右子树中最左边的结点是结点P 的中序后继

结库

3. 设记录

.

的关键字为

,树结点

的败者树,要求除

指向败者记录,

和1

为全胜以外,只

记录下标。写一算法产生对应上述用O(1)辅助空间。

【答案】算法如下:

选得最小关键字记录后,沿从叶结点R[s]到根结点T[0]的路径调整败者树

指示新的胜者

到:_

小数

设置T 中" 败者" 的初值

依次从

出发调整败者

为完全二叉树T 的叶结点,本算法建立败者树

是与题中要求的关键字类型相同的机器最

的双亲结点

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

【答案】算法如下:

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

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

当前元素是红色

当前元素是白色

当前元素是蓝色

5. (1)试分别找出满足下列条件的所有二叉树:(a)前序序列和中序序列相同:(b)前序序列和后序序列相同;(c)中序序列和后序序列相同。

(2)已知非空二叉树的结点结构为(lchild,data , rchild) ,设计算法:从右向左依次将所有叶子的数据值放到向量(假定向量的空间大于叶子的总个数) 中。

【答案】(1)满足条件的二叉树如下:

(a)若前序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。 (b)若前序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。

(c)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树。 (2)算法如下:

全局变量

从右向左依次将二叉树bt 的所有叶子的数据值放到a 向量中 .

中序遍历右子树

叶结点

中序遍历左子树

二、应用题

6. 解答问题。设有数据逻辑结构为:

(1)画出这个逻辑结构的图示。

(2)相对于关系R ,指出所有的开始结点和终端结点。 (3)分别对关系R 中的开始结点,举出一个拓扑序列的例子。 (4)分别画出该逻辑结构的正向邻接表和逆向邻接表。 【答案】(1)如图1所示: