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

2018年云南师范大学信息学院408计算机学科专业基础综合之数据结构考研基础五套测试题

  摘要

一、算法设计题

1. 在二叉排序树的结构中,有些数据元素值可能是相同的,设计一个算法实现按递增有序打印结点的数据域,要求相同的数据元素仅输出一个,算法还应能报出最后被滤掉而未输出的数据元素个数,对如图所示的二叉排序树,输出为:10,12,13,15,18,21,27,35,42。滤掉3个元素。

【答案】算法如下:

递增序输出二叉排序树中结点的值,滤去重复元素

中序遍历左子树

是当前访问结点的前驱,调用本算法时初值为

null

记重复元素,调用

本算法时初值为

前驱后移

中序遍历右子树

结束

2. 设记录

的关键字为

算法

,树结点

的败者树,要求除

指向败者记录,

和1

为全胜以外,只

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

【答案】算法如下:

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

指示新的胜者

到:_

小数

设置T 中" 败者" 的初值

依次从

出发调整败者

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

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

的双亲结点

3. 设计将数组A[n]中所有的偶数移到奇数之前的算法。要求不增加存储空间,且时间复杂性为〇(n)。

【答案】算法如下:

//n个整数存于数组A 中,本算法将数组中所有偶数排在奇数之前

//用类C 语言编写,数组下标从0开始

//交换A[i]与

A[j]

//算法Arrange 结束

4. 设整数序列ai ,a2,a3,…,an ,给出求解最大值的递归程序。

【答案】算法如下:

//设整数序列存于数组a 中,共有n 个,本算法求解其最大值

5. 已知二叉树丁的结点形式为(llink,data ,count ,riink) ,在树中查找值为X 的结点,若找到, 则记数(count)加1; 否则,作为一个新结点插入树中,插入后仍为二叉排序树,写出其非递归算法。

【答案】算法如下:

在二叉排序树t 中査找值为x 的结点,若査到,则其结点的count 域值增1,否则,

将其

插入到二叉排序树中

f 指向当前结点的査找值为x 的结点,

双亲

无值为x 的结点,插入之

査询成功,值域为x 的结点的count 增

1

二、应用题

6. 证明:在二叉树的三种遍历序列中,所有叶结点间的先后关系都是相同的。要求每步论断都指出根据。

【答案】前序遍历是“根左右”,中序遍历是“左根右”,后序遍历是“左右根”。若将“根”去掉,三种遍历就剩“左右”。三种遍历中的差别就是访问根结点的时机不同。二叉树是递归定义的,对左右子树均是按左右顺序来遍历的,因此所有叶结点间的先后关系都是相同的。

7. 有A 、B 两人通过邮箱进行辩论, 每人都从自己的信箱中取得对方的问题。将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中, 设A 的信箱最多放M 个邮件, B 的信箱最多放N 个邮件。初始时A 的信箱有x 个邮件(0

A 、B 两人操作过程: