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

2018年三峡大学计算机与信息学院836数据结构考研核心题库

  摘要

一、算法设计题

1. 编写算法,求二叉树的宽度。

【答案】算法如下:

求二叉树bt 的最大宽度

空二叉树宽度为

Q 是队列,元素为二叉树结点指针,容量

足够大

front 为队头指针,rear 为队尾指针

last 为同层最右结点在队列中的位置

temp 记当前层宽度,maxw 记最大宽度

根结点入队

同层元素数加

1

左子女入队

右子女入队

一层结束

指向下层最右元素

更新当前最大宽度

2. 叙述基数排序算法,并对下列整数序列图示其基数排序的全过程。(179,208,93,306,55,859,984,9,271,33)

【答案】算法如下:

待排序记录的个数

关键字由d 个分量组成

静态链域

记录的其他数据域

存放n 个记录

.

用队列表示桶,共m 个

进行基数排序,返回收集用的链头指针

进行d 趟排序

初始化桶

按关键字的第j 个分量进行分配

k 为桶的序号

将将

链到桶头

链到桶尾

链成一个静态链表

将初始链表的终端结点指针置空,P 指向链表的第一个结点

队列的头、尾指针

修改桶的尾指针

扫描下一个记录

找第一个非空的桶

为收集链表的头指针,t 为尾指针

连接非空桶

本趟收集完毕,将链表的终端结点指针置空

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

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

【答案】算法如下:

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

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

//循环完各行列表头

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

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

//指针后移

//存该行非零元个数

//移到下一行列表头

//输出各行非零元个数

}算法结束

4. 辅助地址表的排序是不改变结点物理位置的排序。辅助地址表实际上是一组指针,用它来指出结点排序后的逻辑顺序地址。设

表示辅助地址表。初始时

减序) 算法的语句序列。

【答案】算法如下:

一趟排序无交换发生,结束

的关键字为

,树结点

的败者树,要求除

指向败者记录,

和1

为全胜以外,只

表示n 个结点的值,用

,在排序中,凡需对结点交换就用它的地址行非零元个数为

}

//稀疏矩阵非零元个数

来进行。例如当n=3时,对K(31,11,19) 则有T(2,3,1) 。试编写实现辅助地址表排序(按非递

5. 设记录

记录下标。写一算法产生对应上述用O(1)辅助空间。

【答案】算法如下:

选得最小关键字记录后,沿从叶结点R[s]到根结点T[0]的路径调整败者树

的双亲结点