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

2018年长沙理工大学计算机与通信工程学院408计算机学科专业基础综合之数据结构考研仿真模拟五套题

  摘要

一、算法设计题

1. 当一棵有n() 个结点的二叉树按顺序存储方式存储在中时,试写一个算法,求出二叉树中结点值分别为X 和Y 的两个结点的最近公共祖先结点的值。

【答案】算法如下:

二叉树顺序存储在数组

中,本算法求结点i 和j 的最近公共祖先结点的值

下标为i 的结点的双亲结点的下标

下标为j 的结点的双亲结点的下标

所査结点的最近公共祖先的下标是,值是设元素类型为 整型

2. 在一个循环链队中只有尾指针(记为rear ,结点结构为数据域data ,指针域next) ,请给出这种队列的入队和出队操作的实现过程。

【答案】算法如下:

//rear是带头循环链队列的尾指针,本算法将元素X 插入到队尾

//申请结点空间

//将s 结点链入队尾

//rear指向新队尾

//rear是带头结点的循环链队列的尾指针

//本算法执行出队操作,成功输出队头元素;否则给出出错信息

//s指向队头元素

//队头元素出队

//空队列

3. 设计将数组A[n]中所有的偶数移到奇数之前的算法。要求不增加存储空间,且时间复杂性为〇(n)。

【答案】算法如下:

//n个整数存于数组A 中,本算法将数组中所有偶数排在奇数之前

//用类C 语言编写,数组下标从0开始

//交换A[i]与

A[j]

//算法Arrange 结束

4. 编写算法打印出由指针Hm 指向总表头的以十字链表形式存储的稀疏矩阵中每一行的非零元的个数。注意:行、列及总表头结点的形式为:

它们已用val 域链接成循环链表。非零元的结点形式也同上,每一行(列) 的非零元由right(down)域把它们链接成循环链表,该行(列) 的表头结点即为该行(列) 循环链表的表头。

【答案】算法如下:

//输出由Hm 指向的十字链表中每一行的非零元素个数

//数组A 记各行非零元个数,i 记行号

//循环完各行列表头

//P是稀疏矩阵行内工作指针,num 记该行非零个

//完成行内非零元的查找

//指针后移

//存该行非零元个数

//移到下一行列表头

//输出各行非零元个数

第行非零元个数为}

//稀疏矩阵非零元个数

}算法结束

5. 已知一个单链表中每个结点存放一个整数,并且结点数不少于2, 请设计算法以判断该链表中第二项起的每个元素值是否等于其序号的平方减去其前驱的值,若满足则返回ture ,否则返回false 。

【答案】算法如下:

//la是结点的元素为整数的单链表。本算法判断从第二结点开始

//毎个元素值是否等干其序号的平方减去其前驱的值,如是返回true ;否则,返回

false

//P是工作指针,初始指向链表的第二项

//pre是p 所指结点的前驱指针

//i是la 链表中结点的序号,初始值为

2

//结点值间的关

系符合题目要求

//当前结点的值不等于其序号的平方减去前驱的值

//未查到表尾就结束了

//成功返回

//算法结束

//假设无头结点,初始P 指向第一元素结点

//初始p ﹣>next 指向第二项

//失败

//成功

二、应用题

6. KMP 算法(字符串匹配算法) 较Brute(朴素的字符串匹配) 算法有哪些改进?

【答案】朴素的模式匹配(Brute.Force)时间复杂度是,KMP 算法有一定改进,时间复杂度达到O(m+n) 。主要优点是主串指针不回溯。当主串很大不能一次读入内存且经常发生部分匹配时,KMP 算法的优点更为突出。

7. 以归并算法为例,比较内部排序和外部排序的不同,说明外部排序如何提高操作效率。

【答案】(1)内部排序中的归并排序是在内存中进行的归并排序,辅助空间为O(n)。外部归并