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

2018年同济大学软件学院408计算机学科专业基础综合之数据结构考研核心题库

  摘要

一、算法设计题

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

【答案】算法如下:

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

中序遍历左子树

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

null

记重复元素,调用

本算法时初值为

前驱后移

中序遍历右子树

结束

算法

2. 写算法将单链表11拆成二个链表,其中以11为头的链表保持原来向后的链接,另一个链表的头为12,其链接方向与11相反,11包含原链表的奇数序号的结点,12包含原链表的偶数序号的结点。

【答案】算法如下:

//本算法将链表L1拆成L1和L2两个链表,L2链接方向与L1相反

//空链表

//奇数序号结点在L1中

//偶数序号

结点逆置插入到L2中

//置L1

表尾

3. 设有一个数组中存放了一个无序的关键序列

【答案】算法如下:

4. 已知关键字序列(

试写出一算法将(

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

''

假设

是大堆,本算法把

(2)

调成大堆

。现要求将K n 放在将元素排序后

的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n(注:用程序实现) 。

) 是大根堆。

) 调整为大根堆;

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

【答案】算法如下:

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

申请结点空间

结点赋值,其线

索初始化

查找结点的插入位置

f 是P 的双亲

根结点

左子女

修改线索

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

修改线索

读入下个数

算法结束

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

,那么right

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

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

二、应用题

6. 某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时, 若有空座位, 则到取号机上领取一个号, 等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时, 通过叫号选取一位顾客, 并为其服务。顾客和营业员的活动过程描述如下: