2018年中国科学技术大学计算机科学与技术学院408计算机学科专业基础综合之数据结构考研强化五套模拟题
● 摘要
一、算法设计题
1. 已知顺序表中有m 个记录,表中记录不依关键字有序排列,编写算法为该顺序表建立一个有序的索引表,索引表中的每一项含记录的关键字和该记录在顺序表中的序号,要求算法的时间复杂度在最好的情况下能达到O(m)。
【答案】算法如下:
顺序表中记录个数
关键字
该关键字在顺序表中的下标
索引表的一项
关键字
记录中的其他数据
给有m 个记录的顺序表seq 建立索引表
index
监视哨
关键字放入正确位置
第i 个记录的下标
2. 设表达式以字符形式己存入数组E 中,'#'为表达式的结束符,
试写出判断表达式中括号
是否配对的C 语言描述算法:EXYX(E)(注:算法中可调用栈操作的基本算法) 。 【答案】算法如下:
//E[ ]是有n 字符的字符数组,存放字符串表达式,以'#'结束。本算法判断表达式中圆括号是否匹配
//s是一维数组,容量足够大,是用于存放括号的栈
//top用作栈顶指针
//'#先入栈,用于和表达式结束符号'#'匹配
//字符数组E 的工作指针
//逐字符处理字符表达式的数组
//读人其他字符,不进行处理
3. 试编写在带头结点的单链表中删除(一个) 最小值结点的(高效) 算法。delete(Linklist&L)
【答案】算法如下:
//L是带头结点的单链表,本算法删除其最小值结点
//P为工作指针。指向恃处理的结点。假定链表非空
//pre指向最小值结点的前驱
//q指向最小值结点,初始假定第一元素结点是最小值结点
//查最小值结点
//指针后移
//从链表上刪除最小值结点
//释放最小值结点空间
//结束算法Delete
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. 试为二叉树写出一个建立三叉链表的算法,并在此三叉链表中删去每一个元素值为x 的结点,以及以它为根的子树,且释放相应存储空间。二叉树的三叉链表的描述为:
{二叉树根结点的指针}
【答案】算法如下:
生成三叉链表的二叉树(题目给出PASCAL 定义,下面用类C 语言书写
)
是二叉树结点指针的一维数组,容量足够大