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

2018年北京师范大学系统科学学院408计算机学科专业基础综合之数据结构考研强化五套模拟题

  摘要

一、算法设计题

1. 设

要求按是一个记录构成的数组,是一个整数数组,其值介于1〜100之间,现的内容调整A 中记录的次序,比如当B[l]=ll 时,则要求将A[l]的内容调整到A[ll]中去。规定可使用的附加空间为O(1)。

【答案】算法如下:

//A是100个记录的数组,B 是整型数组,本算法利用数组B 对A 进行计数排序

//若B[i]=i 则A[i]正好在自己的位置上,则不需要调整

//B[j]和B[k]交换

//r0是数组A 的元素类型,A[j]和A[k]

交换

//完成了一个小循环,第i 个已经安排好

//算法结束

2. 试设计一个C 语言算法(或C 语言程序) :用单链表做存储结构,以回车符为结束标志,输入一个任意长度的字符串,然后判断该字符串是否为“回文”(正向读和反向读时,串值相同的字符串称为“回文”) ,输出信息“Yes ”或“NO ”;最后删除字符串并释放全部空间。例如:

若输入“ABCD12321DCBA”是回文,则输出“Yes”;

若输入“ABCD123DCBA”,不是回文,则输出“NO”。

要求:定义相关数据类型,不得使用数组(顺序表) 做字符串的存储结构和辅助存储空间。假定字符串的长度为n ,试分析上述算法的时间复杂度。

【答案】算法如下:

//本算法判断数据域为字符且长为n 的单链表是否是”回文" ,返回1或0表示成功或失败

//字符栈,容量足够大

//设链表带头结点

//前一半字符入栈,链表指针后移

//若链表有奇数个结点,则跳过中间结点

//不是回文

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

【答案】算法如下:

二叉树顺序存储在数组

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

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

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

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

4. 有二叉排序树采用二叉链表方式存放,树中结点值各不相同,欲得到一个由大到小的结点值递减序列,简述处理方法思路,用非递归形式写出算法。

【答案】算法如下:

按递减次序输出二叉排序树结点的值

是元素为二叉树结点指针的栈,容量足够大

沿右子树向下

结束

5. 已知两个链表A 和B 分别表示两个集合,其元素递增排列。编一函数,求A 与B 的交集,并存放于A 链表中。

【答案】算法如下:

//设工作指针pa 和pb ;

//结果表中当前合并结点的前驱的指针

//交集并入结果表中

//释放结点空

//释放结点空间

//释放结点空间

//置链表尾标记

//注:本算法中也可对B 表不作释放空间的处理

二、应用题

6. 只要找出一个具有n 个元素的集合的第

最适合? 给出实现的思想。

【答案】在具有n 个元素的集合中找第个最小元素,应使用快速排序方法。其基本思想如下:设n 元素的集合用一维数组表示,其第一个元素的下标为1,最后一个元素下标为n 。以第一个元素为“枢轴”,经过快速排序的一次划分,找到“枢轴”的位置i ,若i=k,则该位置的元素即为所求;若说,则在1至i -1间继续进行快速排序的划分;若i

7. 队列可以用循环单链表来实现,故可以只设置一个头指针或者只设置一个尾指针。请你分析对于循环单链表实现的队列,用哪种方案更合适。

【答案】循环单链表若只设头指针,则出队操作时间复杂度是O (1),而如对操作时间复杂度是O(n); 若只设尾指针,则出队和入队操作时间复杂度都是O (1)。因此,用循环单链表来实现队列,设置一个尾指针更合适。

8. 已知有5个顶点的图如下图所示

个最小元素,你所学过的排序方法中哪种

请回答下列问题

(1)写出上图的邻接矩阵A(行、列下标从0开始) 。