2018年北京市培养单位生命科学学院866计算机原理之数据结构考研基础五套测试题
● 摘要
一、算法设计题
1. 编写对有序表进行顺序查找的算法,并画出对有序表进行顺序查找的判定树。假设每次查找时的给定值为随机值,又查找成功和不成功的概率也相等,试求进行每一次查找时和给定值进行比较的关键字个数的期望值。
【答案】算法如下:
在具有个元素的有序表R 中,顺序査找值为K 的结点,査找成功返回其位置
否则返回-1表示失败
元素序号
结束
,查找失败的平均查找
期望值分析:在等概率情况下,则查找成功的平均查找长度为等,则查找成功时和关键字比较的个数的期望值约为。
2. 已知一棵高度为K 具有n 个结点的二叉树,按顺序方式存储。
(1)编写用前序遍历树中每个结点的非递归算法;
(2)编写将树中最大序号叶结点的祖先结点全部打印输出的算法。 【答案】(1)算法如下:
全局变量
递妇遍历以顺序方式存储的二叉树bt ,i 是根结点下标(初始调用时为
1)
是桟s 的栈顶指针,栈容量足够大
访问根结点,设虚结点
以0表示
右子女的下标位置入
第 2 页,共 38 页
长度为(n+2)/2(失败位置除小于每一个,还存在大于最后一个) 。若查找成功和不成功的概率也相
栈
沿左子女向下
取出栈顶元素
结束
(2)算法如下:
打印最大序号叶结点的全部袓先
找最大序号叶结点,该结点存储时在最后
的双亲结点
f
从结点c 的双亲结点直到根结点,
路径上所有结点均为祖先结点
逆序输出,最老的祖先最后输出
结束
3. 试编写一算法对二叉树按前序线索化。
【答案】算法如下:
设置前驱
对以线索链表为存储结构的二叉树BT 进行前序线索化
设置左线索
设置前驱的右线索
为建立右链做准备
前驱后移
左子树前序线索化
右子树前序线索化
结束
4. 设要求按
是一个记录构成的数组,
是一个整数数组,其值介于1〜100之间,现
的内容调整A 中记录的次序,比如当B[l]=ll 时,则要求将A[l]的内容调整到A[ll]
中去。规定可使用的附加空间为O(1)。
【答案】算法如下:
//A是100个记录的数组,B 是整型数组,本算法利用数组B 对A 进行计数排序
//若B[i]=i 则A[i]正好在自己的位置上,则不需要调整
第 3 页,共 38 页
//B[j]和B[k]交换
//r0是数组A 的元素类型,A[j]和A[k]
交换
//完成了一个小循环,第i 个已经安排好
//算法结束
5. 设记录
的关键字为
。
,树结点
的败者树,要求除
指向败者记录,
和1
为全胜以外,只
记录下标。写一算法产生对应上述用O(1)辅助空间。
【答案】算法如下:
选得最小关键字记录后,沿从叶结点R[s]到根结点T[0]的路径调整败者树
是
指示新的胜者
到:_
小数
设置T 中" 败者" 的初值
依次从
出发调整败者
为完全二叉树T 的叶结点,本算法建立败者树
是与题中要求的关键字类型相同的机器最
的双亲结点
二、应用题
6. 主机H 通过快速以太网连接Internet , IP 地址为
表a
, 服务器S 的IP 地址为
。
H 与S 使用TCP 通信时, 在H 上捕获的其中5个IP 分组如表a 所示。
第 4 页,共 38 页
相关内容
相关标签