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

2018年青海师范大学计算机学院408计算机学科专业基础综合[专业硕士]之数据结构考研核心题库

  摘要

一、算法设计题

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

【答案】算法如下:

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

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

沿右子树向下

结束

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

【答案】算法如下:

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

记录结点的逆序序号

,则编号

求各顶点的入度

3. 已知关键字序列(

试写出一算法将(

) 是大根堆。

) 调整为大根堆;

利用(1)的算法写一个建大根堆的算法。 【答案】(1)算法如下:

''

假设

是大堆,本算法把

(2)

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

【答案】算法如下:

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

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

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

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

//查最小值结点

//指针后移

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

//释放最小值结点空间

//结束算法Delete

5. 有n 个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法(注:双向起泡排序即相邻两趟排序向相反方向起泡) 。

【答案】算法如下:

对存储在带头结点的双向链表head 中的元素进行双向起泡排序

设标记

双向链表尾,算法过程中是向上起泡的开始结点

是工作指针,指向当前结点

调成大堆

假定本趟无交换

向下(右) 起泡,一趟有一个最大元素沉底

交换两结点指针,涉及6条链

有交换

先将结点从链表上摘下

将temp 插到p 结点前

无交换,指针后移

准备向上起泡

向上(左) 起泡,一趟有一个最小元素冒

交换两结点指针,涉及6条链

有交换

先将temp 结点从链表上摘

将temp 插到p 结点后(右

)

无交换,指针前移

准备向下起泡

算法结束

二、应用题

6. (1)如果G1是一个具有n 个顶点的连通无向图,那么G1最多有多少条边?G1最少有多少条边?

(2)如果G2是一个具有n 个顶点的强连通有向图,那么G2最多有多少条边?G2最少有多少条边?

(3)如果G3是一个具有n 个顶点的弱连通有向图,那么G3最多有多少条边?G3最少有多少条边?

【答案】(1)G1最多n(n-1)/2条边,最少n -1条边。 ⑵G2最多n(n-1) 条边,最少n 条边。 (3)G3最多n(n-1条边,最少n -1条边。