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

2018年西安交通大学软件学院820计算机软件基础(含数据结构、程序设计)之数据结构考研基础五套测试题

  摘要

一、算法设计题

1. 假设以I 和0分别表示入栈和出栈操作。栈的初态和终态均为空,入桟和出找的操作序列可表示为仅由I 和0组成的序列,称可以操作的序列为合法序列,否则称为非法序列。

(1)下面所示的序列中哪些是合法的?

A.

B.

C.

D.

(2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true ,否则返回false(假定被判定的操作序列已存入一维数组中) 。

【答案】(1)A和D 是合法序列,B 和C 是非法序列。 (2)设被判定的操作序列已存入一维数组A 中,算法如下:

//判断字符数组A 中的输入输出序列是否是合法序列。

//i为下标

//j和k 分别为I 和字母O 的个数

//入栈次数增

1

//不论A[i]是’I'或’〇' ,指针i 均后移

//算法结束

2. 从键盘上输入一串正整数,最后输入-1作为结束标志。如:8,7,1,22,98,46,... ,75,-1。请设计一个非递归程序,创建一棵二叉排序树,并且该二叉排序树也必须是中序线索二叉树。设ltag ,data ,rta9,right) 。该二叉排序树上的结点结构为(teft,其中:data 域为结点的数据场。那么left 域中存在的是该结点的左儿子结点的地址。序遍历次序的前驱结点的地址。

【答案】算法如下:

第 2 页,共 35 页

,那么left 域中存放的是该结点的按中

,那么right

域中存放的是该结点的右儿子结点的地址。

,那么right 域中存放的是该结点的按中序遍历次序的后继结点地址。

从键盘上输入一串正整数,建立一棵初始为空的二叉排序树,同时也是线索二叉树

申请结点空间

结点赋值,其线

索初始化

查找结点的插入位置

f 是P 的双亲

根结点

左子女

修改线索

右子树根结点的值大于等于根结点的值

修改线索

读入下个数

算法结束

3. 请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink —rlink 法存储。

【答案】算法如下:

判断二叉树是否是二叉排序树,本算法结束后,在调用程序中由flag 得出结论

中序遍历左子树

中序遍历的第一个结点不必判断

前驱指针指向当前结点

不是完全二叉树

中序遍历右子树

第 3 页,共 35 页

算法结束

判断二叉树t 是否是二叉排序树,若是,返回true ,否则,返回

false

若左右子树均为二叉

排序树

左子树中的最大值和右子树中

的最小值

不是二叉排序树

结束

求二叉树左子树的最大值

返回机器最小整数

求二叉树右子树的最小值

返回机器最大整数

4. 编程:假设以数组Q[m]存放循环队列中的元素,同时以rear 和length 分别指示环形队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件,并写出相应的初始化(initqueue),插入(enqueue)和删除(dequeue)元素的操作。

【答案】定义队列:

//循环队列占m 个存储单元

//rear指向队尾元素,length 为元素个数

(1)设cq 是seQueue 类型变量,则当(2)队列的初始化:

//cq为循环队列,本算法进行队列初始化

//算法结束 (3)队列的插入:

//cq是已如上定义的循环队列,本算法将元素x 入队

//队满

第 4 页,共 35 页

时队列空,当 时队列满。