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

2018年安徽农业大学信息与计算机学院408计算机学科专业基础综合之数据结构考研基础五套测试题

  摘要

一、算法设计题

1. 用邻接多重表存储结构,编写FERST-ADJ(G,V) 函数,函数返回值为第一个邻接点,若V 没有邻接点,返回零。

【答案】算法如下:

在邻接多重表g 中,求v 的第一邻接点, 若存在,返回第一邻接点,否则返回

确定顶点v 在邻接多重表向量中的下标, 不考虑不存在v 的情

返回第一邻接点,

中必有一个等于

i

取第一个边结点

2. 已知两个线性表A , B 均以带头结点的单链表作存储结构,且表中元素按值递增有序排列。设计算法求出A 与B 的交集C ,要求C 另开辟存储空间。,并同样以元素值的递增有序的单链表形式存储。

【答案】算法如下:

//线性表A 和B 以带头结点的单链表作为存储结构。本算法求A 和B 的交集C , C 另辟空间

//pa、pb 是两链表的工作指针

//监视哨

//pa指针后移

//pb指针后移

//处理交集元素

//删除重复元素

//交集元素并入结果表

//置结果链表尾

3. 请编写完整的程序。如果矩阵A 中存在这样的一个元素A[i,j]满足条件:A[i,j]是第i 行中值最小的元素,且又是第j 列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出m*n的矩阵A 的所有马鞍点。

【答案】算法如下:

//A是的矩阵,本算法求矩阵A 中的马鞍点

//max数组存放各列最大值元素的行号,初始化为行号

//min数组存放各行最小值元素的列号,初始化为列号

0 //选各行最小值元素和各列最大值元素

//修改第j 列最大元素的

行号

" 修改第i 行最小元素的

列号

//第i 行最小元素的列号

是马鞍点,

元素值是

是马鞍点

4. 以三元组表存储的稀疏矩阵A ,B 非零元个数分别为m 和n 。试用类PASCAL 语言编写时间复杂度为0(m+n) 的算法将矩阵B 加到矩阵A 上去。A 的空间足够大,不另加辅助空间。要求描述所用结构。

【答案】算法如下:

=大于非零元素个数的某个常量

//本算法实现以三元组表存储的各有m 和n 个非零元素两个稀疏矩阵相加,结果放到A 中

//L,p 为A ,B 三元组表指针,k 为结果三元组表榫针(下标

)

//

//行号不等时,行号大者的三元组为结果三元组表中一项

//A中当前项为结

果项

//B中当前项为结果

当前项

//行号相等时,比较列号

//结束行号相等时的处理

//结束行号比较处理

//结果三元组表的指针前移(减

1)

//结束WHILE 循环。

//处理B 的剩余部

//处理A 的剩余部

//稀疏矩阵相应元素相加时,有和为零的元素,因而元素总数<m +

n

//三元组前移,使第一个三元组的下标

1

//修改结果三元组表中非零元素个数

//结束addmatrix

5. 设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非递归算法按递减序打印所有左子树为空,右子树非空的结点的数据域的值。

【答案】(1)递归算法如下:

递减序输出二叉排序树t 中所有左子树为空右子树非空的结点数据域的值

(2)非递归算法如下: