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

2018年同济大学交通运输工程学院408计算机学科专业基础综合之数据结构考研核心题库

  摘要

一、算法设计题

1. 线性表中元素存放在向量A(1,... ,,1) 中,元素是整型数。试写出递归算法求出A 中的最大和最小元素。

【答案】算法如下:

//一维数组A 中存放有n 个整型数,本算法递归的求出其中的最小数和最大数

//算法结束

2. 已知一个单链表中每个结点存放一个整数,并且结点数不少于2, 请设计算法以判断该链表中第二项起的每个元素值是否等于其序号的平方减去其前驱的值,若满足则返回ture ,否则返回false 。

【答案】算法如下:

//la是结点的元素为整数的单链表。本算法判断从第二结点开始

//毎个元素值是否等干其序号的平方减去其前驱的值,如是返回true ;否则,返回

false

//P是工作指针,初始指向链表的第二项

//pre是p 所指结点的前驱指针

//i是la 链表中结点的序号,初始值为

2

//结点值间的关

系符合题目要求

//当前结点的值不等于其序号的平方减去前驱的值

//未查到表尾就结束了

//成功返回

//算法结束

//假设无头结点,初始P 指向第一元素结点

//初始p ﹣>next 指向第二项

//失败

//成功

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

【答案】算法如下:

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

中序遍历左子树

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

null

记重复元素,调用

本算法时初值为

前驱后移

中序遍历右子树

结束

算法

4. 写一算法找出n 个数的最大值和最小值,要求最坏条件下的元素比较次数为

【答案】算法如下:

用最多3n/2-2次比较在n 个元素r 中选出最大值和最小值

n 为偶数时

r 最小值

("最大值

) ;

5. 写出算法,求出中序线索二叉树中给定值为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 的中序后继

结库

.

二、应用题

6. 在二叉树的Llink-Rlink 存储表示中,引入“线索”的好处是什么?

【答案】在二叉链表表示的二叉树中,引入线索的目的主要是便于查找结点的前驱和后继。因为若知道各结点的后继,二叉树的遍历就非常简单。利用二叉链表结构查结点的左右子女非常方便,但其前驱和后继是在遍历中形成的。为了将非线性结构二叉树的结点排成线性序列,利用结点的空链域,左链为空时作为前驱指针,右链为空时作为后继指针。再引入左右标记ltag 和rtag ,规定:当当

时,lchild 指向左子树,当

时,Ichild 指向前驱;当

时,rchild 指向右子树,

时,rchild 指向后继。这样,在线索二叉树(特别是中序线索二叉树) 上遍历就消除了递归,