2018年西南财经大学经济信息工程学院408计算机学科专业基础综合之数据结构考研仿真模拟五套题
● 摘要
一、算法设计题
1. 写一算法找出n 个数的最大值和最小值,要求最坏条件下的元素比较次数为
。
【答案】算法如下:
用最多3n/2-2次比较在n 个元素r 中选出最大值和最小值
n 为偶数时
r 最小值
("最大值) ;
2. 已知指针P 指向带表头的中根次序线索二叉树中的某结点,试写一算法FFA(P,q) , 该算法寻找结点P 的父亲结点q 。设线索二叉树的结点结构、表头结点结构和空树结构分别为(LTAG,LLINK ,INFO , RL1NK ,RTAG) ,且规定线索树的最左下结点的LLINK 域和最右下结点的RLINKt 域指向表头。
【答案】算法如下:
在中序线索树t 上,求结点p 的双亲结点q
暂存
找P 的中序最右下的结点
顺右线索找到q 的后继(P的袓先结点
)
若后继是头结点,则转到根结点
根结点无双亲
找最右结点的过程中回找到P
第 2 页,共 34 页
准备到左子树中找
P
结束FFA
3. 已知一棵高度为K 具有n 个结点的二叉树,按顺序方式存储。
(1)编写用前序遍历树中每个结点的非递归算法;
(2)编写将树中最大序号叶结点的祖先结点全部打印输出的算法。 【答案】(1)算法如下:
全局变量
递妇遍历以顺序方式存储的二叉树bt ,i 是根结点下标(初始调用时为
1)
是桟s 的栈顶指针,栈容量足够大
访问根结点,设虚结点
以0表示
右子女的下标位置入
栈
沿左子女向下
取出栈顶元素
结束
(2)算法如下:
打印最大序号叶结点的全部袓先
找最大序号叶结点,该结点存储时在最后
的双亲结点
f
从结点c 的双亲结点直到根结点,
路径上所有结点均为祖先结点
逆序输出,最老的祖先最后输出
结束
4. 已知关键字序列(
试写出一算法将(
利用(1)的算法写一个建大根堆的算法。 【答案】(1)算法如下:
''
假设
是大堆,本算法把
第 3 页,共 34 页
) 是大根堆。
) 调整为大根堆;
调成大堆
(2)
5. 设计算法将一个带头结点的单链表A 分解为两个具有相同结构的链表B 、C , 其中B 表的结点为A 表中值小于零的结点,而C 表的结点为A 表中值大于零的结点(链表A 的元素类型为整型,要求B 、C 表利用A 表的结点) 。
【答案】算法如下:
//本算法将带头结点的单链表A 分解成数据域值小于零和大于零的两个单链表B 和
C
//为C 申请结点空间
//C初始化为空表
//P为工作指针
//B表初始化
//暂存P 的后继
//小于0的放入B 表
//将小于0的结点链人B 表
//P指向新的待处理结点
//算法结束
二、应用题
6. 某16位计算机中, 带符号整数用补码表示, 数据Cache 和指令Cache 分离。题44表给出了指令系统中部分指令格式, 其中Rs 和Rd 表示寄存器, mem 表示存储单元地址, (X)表示寄存器X 或存储单元X 的内容。
表 指令系统中部分指令格式
该计算机采用5段流水方式执行指令, 各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)和结果写回寄存器(WB), 流水线采用“按序发射, 按序完成”方式, 没有采用转发技术处理数据相关, 并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题。
第 4 页,共 34 页