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

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 语言书写

)

是二叉树结点指针的一维数组,容量足够大