2018年中国石油大学(北京)地球物理与信息工程学院955数据结构(II)[专业硕士]考研仿真模拟五套题
● 摘要
一、算法设计题
1. 写出算法,求出中序线索二叉树中给定值为X 的结点之后继结点,返回该后继结点的指针。线索树中结点结构为;
。其中,data 存放结点的值;lc 、rc 为指向左、
右孩子或该结点前驱、后继的指针,ltag 、rtag 为标志域,若值为0, 则lc 、rc 为指向左、右孩子的指针;若值为1,则lc 、rc 为指向其前驱、后继结点的指针。
【答案】算法如下:
先在带头结点的中序线索二叉树T 中査找给定值为x 的结点,假定值为x 的结点存在
设P 指向二叉树的根结点
结束
在中序线索二叉树T 中,, 求给定值为x 的结点的
后继结点
首先在T 树上査找给定值为x 的结点,由p 指向
' 若P 的右标志为1, 则P 的rc 指针指向其后继
结点P 的右子树中最左边的结点是结点P 的中序后继
结库
.
2. 串以静态存储结构存储,结构如下所述,试实现串操作equal 算法。
串被确认的最大长度
【答案】算法如下:
//本算法判断字符串S 和字符串t 是否相等,如相等返回1,否则返回
第 2 页,共 34 页
//在类C 中,一维数组下标从零开始
//两串相等
//算法结束
3. 写算法将单链表11拆成二个链表,其中以11为头的链表保持原来向后的链接,另一个链表的头为12,其链接方向与11相反,11包含原链表的奇数序号的结点,12包含原链表的偶数序号的结点。
【答案】算法如下:
//本算法将链表L1拆成L1和L2两个链表,L2链接方向与L1相反
//空链表
//奇数序号结点在L1中
//偶数序号
结点逆置插入到L2中
//置L1
表尾
4. 请编写完整的程序。如果矩阵A 中存在这样的一个元素A[i,j]满足条件:A[i,j]是第i 行中值最小的元素,且又是第j 列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出m*n的矩阵A 的所有马鞍点。
【答案】算法如下:
//A是的矩阵,本算法求矩阵A 中的马鞍点
//max数组存放各列最大值元素的行号,初始化为行号
//min数组存放各行最小值元素的列号,初始化为列号
0 //选各行最小值元素和各列最大值元素
//修改第j 列最大元素的
行号
" 修改第i 行最小元素的
第 3 页,共 34 页
列号
//第i 行最小元素的列号
是马鞍点,
元素值是
是马鞍点
5. 设计将数组A[n]中所有的偶数移到奇数之前的算法。要求不增加存储空间,且时间复杂性为〇(n)。
【答案】算法如下:
//n个整数存于数组A 中,本算法将数组中所有偶数排在奇数之前
//用类C 语言编写,数组下标从0开始
//交换A[i]与
A[j]
//算法Arrange 结束
//
二、应用题
6. 调用下列C 函数f(n),回答下列问题:
(1)试指出f(n)值的大小,并写出,f(n)值的推导过程;
(2)假定n =5, 试指出,f(5)值的大小和执行,f(5)时的输出结果。 C 函数:
【答案】(1)第一层FOR 循环判断n +1次,往下执行n 次,第二层FOR 执行次数为(n+(n﹣1) +(n﹣2) +... +1) ,第三层循环体受第一层循环和第二层循环的控制,其执行次数如表所示。
执行次数
第 4 页,共 34 页