2018年内蒙古科技大学信息工程学院818数据结构考研强化五套模拟题
● 摘要
一、算法设计题
1. 图G 有n 个点,利用从某个源点到其余各点最短路径算法思想,设计一产生G 的最小生成树的算法。
【答案】算法如下:
利用从源点v0到其余各点的最短路径的思想,产生以邻接矩阵表示的图G 的最小生成
树
数组存放生成树
数组存放顶点是否找到最短路径
初始化, 设顶点信息就是编号
从v0开始,求其最小生成树
是尚未到最小生成树的顶点的集合
循环n -1次
顶点u 已找到最短路径下,下面修改相关顶点的最短路径
算法结束
2. 已知关键字序列(
试写出一算法将(
利用(1)的算法写一个建大根堆的算法。 【答案】(1)算法如下:
''
假设
是大堆,本算法把
第 2 页,共 37 页
) 是大根堆。
) 调整为大根堆;
调成大堆
(2)
3. 给定一个整数数组求出b 中最长平台的长度。
【答案】算法如下:
b 中连续的相等元素构成的子序列称为平台。试设计算法,
//求具有N 个元素的整型数组b 中最长平台的长度。
//局部最长平台
//新平台起点
(“最长平台长度
4. 设有两个栈S 1,S 2都采用顺序栈方式,并且共享一个存储区的操作算法。
【答案】找的定乂:
两栈共享顺序存储空间所能达到的最多元素数
//假设元素类型为整型
; //栈空间
//top为两个栈顶指针
//S是如上定义的结构类型变量,为全局变量
(1)入栈操作:
//入栈操作。i 为栈号,i =〇表示左栈Sl ,i =l 表示右栈s2,x 是入栈元素。入栈成功返回1,否则返回
第 3 页,共 37 页
在b 数组中起始下标为”,1,
k)
为了尽量利用
空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S 1,S 2有关入栈和出找
(2)出栈操作
//出栈算法。i 代表栈号,i =0时为s1栈,i =l 时为s2栈。出栈成功返回出栈元素,否则返﹣
1
//算法结束
5. (1)试分别找出满足下列条件的所有二叉树:(a)前序序列和中序序列相同:(b)前序序列和后序序列相同;(c)中序序列和后序序列相同。
(2)已知非空二叉树的结点结构为(lchild,data , rchild) ,设计算法:从右向左依次将所有叶子的数据值放到向量(假定向量的空间大于叶子的总个数) 中。
【答案】(1)满足条件的二叉树如下:
(a)若前序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。 (b)若前序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。
(c)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树。 (2)算法如下:
全局变量
从右向左依次将二叉树bt 的所有叶子的数据值放到a 向量中 .
中序遍历右子树
叶结点
中序遍历左子树
二、应用题
第 4 页,共 37 页