2018年大连理工大学盘锦校区商学院408计算机学科专业基础综合之数据结构考研核心题库
● 摘要
一、算法设计题
1. 假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树BT 中,写出计算该算术表达式值的算法。
【答案】算法如下:
以后序遍历算法求以二叉树表示的算术表达式的
值
.
2. 图G 有n 个点,利用从某个源点到其余各点最短路径算法思想,设计一产生G 的最小生成树的算法。
【答案】算法如下:
利用从源点v0到其余各点的最短路径的思想,产生以邻接矩阵表示的图G 的最小生成
树
数组存放生成树
数组存放顶点是否找到最短路径
初始化, 设顶点信息就是编号
从v0开始,求其最小生成树
第 2 页,共 31 页
求左子树表示的子表达式的值
求右子树表示的子表达式的值
是尚未到最小生成树的顶点的集合
循环n -1次
顶点u 已找到最短路径下,下面修改相关顶点的最短路径
算法结束
3. 有n 个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法(注:双向起泡排序即相邻两趟排序向相反方向起泡) 。
【答案】算法如下:
对存储在带头结点的双向链表head 中的元素进行双向起泡排序
设标记
双向链表尾,算法过程中是向上起泡的开始结点
是工作指针,指向当前结点
假定本趟无交换
向下(右) 起泡,一趟有一个最大元素沉底
交换两结点指针,涉及6条链
有交换
先将结点从链表上摘下
将temp 插到p 结点前
无交换,指针后移
准备向上起泡
向上(左) 起泡,一趟有一个最小元素冒
出
交换两结点指针,涉及6条链
有交换
先将temp 结点从链表上摘
下
第 3 页,共 31 页
将temp 插到p 结点后(右
)
无交换,指针前移
准备向下起泡
算法结束
4. 以三元组表存储的稀疏矩阵A ,B 非零元个数分别为m 和n 。试用类PASCAL 语言编写时间复杂度为0(m+n) 的算法将矩阵B 加到矩阵A 上去。A 的空间足够大,不另加辅助空间。要求描述所用结构。
【答案】算法如下:
=大于非零元素个数的某个常量
//本算法实现以三元组表存储的各有m 和n 个非零元素两个稀疏矩阵相加,结果放到A 中
//L,p 为A ,B 三元组表指针,k 为结果三元组表榫针(下标
)
//行号不等时,行号大者的三元组为结果三元组表中一项
//A中当前项为结
果项
//B中当前项为结果
当前项
//行号相等时,比较列号
//结束行号相等时的处理
//结束行号比较处理
//结果三元组表的指针前移(减1)
第 4 页,共 31 页
相关内容
相关标签