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

2018年贵州师范大学地理与环境科学学院408计算机学科专业基础综合[专业硕士]之数据结构考研基础五套测试题

  摘要

一、算法设计题

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

【答案】算法如下:

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

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

沿右子树向下

结束

2. 试编写在带头结点的单链表中删除(一个) 最小值结点的(高效) 算法。delete(Linklist&L)

【答案】算法如下:

//L是带头结点的单链表,本算法删除其最小值结点

//P为工作指针。指向恃处理的结点。假定链表非空

//pre指向最小值结点的前驱

//q指向最小值结点,初始假定第一元素结点是最小值结点

//查最小值结点

//指针后移

//从链表上刪除最小值结点

//释放最小值结点空间

//结束算法Delete

3. 假定用两个一维数组L 【N 】和R 【N 】作为有N 个结点1,2,…,N

的二叉树的存储结构。

分别指示结点i 的左儿子和右儿子,

,使

) 表示i 的左(右) 儿子为空。试写一个

存放结点i 的父亲;然后再写一个判别结点u 是否

算法,由L 和R 建立一个一维数组为结点V 的后代的算法。

【答案】算法如下:

是含有N 个元素且指示二叉树结点i 左儿子和右儿子的一维数组

T 数组初始化

若结点i 的左子女是则结点L 的

双亲是结点

i

若结点i 的右子女是R , 则R 的

双亲是

i

判断U 是否是V 的后代

4. 已知非空双向链表由d 指出,结点结构为(llink,data ,rlink) ,请设计算法将链表中数据域值最大(假定唯一) 的那个结点移至链表的最前面。要求:不得额外申请新的双链表结点。

【答案】算法如下:

//d是循环链表,本算法将链表中数据域值最大的结点移至链表的最前面

//设链表有头结点

//q指向待处理结点

//P记数据域值最大的结点

//将P 摘下

//插人P 结点

5. 令G=(V, E) 为一个有向无环图,编写一个给图G 中每一个顶点赋以一个整数序号的算法,并满足以下条件:若从顶点i 至顶点j 有一条弧,则应使i

【答案】算法如下:

本算法据此建立结点i 的双亲数组T , 并判断结点U 是否是结点V 的后代

对以邻接表存储的DAG 图g 重新编号, 使若有

记录结点的逆序序号

,则编号

求各顶点的入度

二、应用题

6. 线性表有两种存储结构:一是顺序表,二是链表。试问:

(1)如果有,2个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在此情况下,应选用哪种存储结构? 为什么?

(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构? 为什么?

(1)应选择链式存储结构。【答案】因为它可动态申请内存空间,不受表长度(即表中元素个数) 的影响,插入、删除时间复杂度为O(1)。

(2)应选择顺序存储结构。因为顺序表可以随机存取,时间复杂度为O(1)。

7. 设内存中可利用空间已连成一个单链表,对用户的存储空间需求,一般有哪三种分配策略?

【答案】(1)首次适配法

从链表头指针开始查找,找到第一个大于等于所需空间的结点即分配。首次适配法适合事先不知道请求分配和释放信息的情况,分配时需查询,释放时插在表头。

(2)最佳适配法

链表结点大小增序排列,找到第一个大于等于所需空间的结点即分配。最佳适配法适用于请求分配内存大小范围较宽的系统,释放时容易产生存储量很小难以利用的内存碎片,同时保留那些很大的内存块以备将来可能发生的大内存量的需求,分配与回收均需查询。

(3)最差适配法

链表结点大小逆序排列,总从第一个结点开始分配,将分配后结点所剩空间插入到链表适当位置。最差适配法适合请求分配内存大小范围较窄的系统,分配时不查询,回收时查询,以便插