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

2018年广西民族大学软件学院408计算机学科专业基础综合之数据结构考研基础五套测试题

  摘要

一、算法设计题

1. 已知一棵高度为K 具有n 个结点的二叉树,按顺序方式存储。

(1)编写用前序遍历树中每个结点的非递归算法;

(2)编写将树中最大序号叶结点的祖先结点全部打印输出的算法。 【答案】(1)算法如下:

全局变量

递妇遍历以顺序方式存储的二叉树bt ,i 是根结点下标(初始调用时为

1)

是桟s 的栈顶指针,栈容量足够大

访问根结点,设虚结点

以0表示

右子女的下标位置入

沿左子女向下

取出栈顶元素

结束

(2)算法如下:

打印最大序号叶结点的全部袓先

找最大序号叶结点,该结点存储时在最后

的双亲结点

f

从结点c 的双亲结点直到根结点,

路径上所有结点均为祖先结点

逆序输出,最老的祖先最后输出

结束

2. 设稀疏矩阵中有t 个非零元素,用三元组顺序表的方式存储。请设计一个算法,计算矩阵M 的转置矩阵N ,要求转置算法的时间复杂度为0(n+t) 。

【答案】算法如下:

第 2 页,共 38 页

//采用三元组表方式存储,按列序实现矩阵的转置

//行数、列数和非零元素个数

//设置N 中第一个非零元素从下标1开始存储

//按列,共

//在//转置

//三元组表上实现矩阵的快速转置的算法

//矩阵M 每一列非零元初始化为零

//求矩阵M 每一列的非

零元个数

//第1列第一个非零元在转置后的三元组中下标是

1

//求

第j 列第一个非零元在

中的序号

个元素中查找

//求转置矩阵N 的三元组表

//同列下一非零元

素位置

3. 已知P 是指向单向循环链表最后一个结点的指针,试编写只包含一个循环的算法,将线性表(

) 改造为(

【答案】算法如下:

//本算法将线性表

改造为

第 3 页,共 38 页

) 。

//q指向a 1结点

//r记住a l 结点的指

//先将a 1结点放到正确位置

//从a 2结点开始

//暂存后继

//对称放置

//恢复待处理结点

4. 设线性表存于A[l..size]的前mun 各分量中,且递增有序。请设计一个算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并在设计前说明设计思想,最后说明所设计算法的时间复杂度。

【答案】算法如下:

//A是Size 个元素空间但目前仅有num(num<size}个元素的线性表 //本算法将元素x 插入到线性表中,并保持线性表的有序性

//题目要求下标从1开始

//对分査找元素x 的插入位置

//元素后移

//将元素x 插人

算法结束

设计思想:算法中当查找失败(即线性表中无元素X) 时,变量low 在变量high 的右面(low=high +l) 。移动元素从位置low 开始,直到num 为止。

时间复杂度:查找的复杂度为O (logn),插入的时间复杂度为O (n),若用顺序查找,则查找的时间复杂度亦为O(n)。

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

【答案】算法如下:

第 4 页,共 38 页