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

2018年北京市培养单位材料科学与光电技术学院408计算机学科专业基础综合之数据结构考研仿真模拟五套题

  摘要

一、算法设计题

1. 给出以十字链表作存储结构,建立图的算法,输入(i, j , V) , 其中i , j 为顶点号,v 为权值。

【答案】算法如下:

建立有向图的十字链表存储结构

假定权值为整型

建立顶点向量

当输入i 、j 、v 之一为0时,结

束算法运行

申请结点

弧结点中权值域

算法结束

2. 写出一趟快速排序算法。

【答案】算法如下:

一趟快速排序算法,枢轴记录到位,并返回其所在位置

3. 已知二叉树采用二叉链表存储,设计算法以输出二叉树T 中根结点到每个叶结点的路径。

【答案】算法如下::

第 2 页,共 36 页

打印从根结点bt 到结点p 之间路径上的所有结点

.

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

是数组,元素值为0或1, 访问左、右子树的标志,tag 和s 同

根结点就是所找结点

左子女入栈,并置标记

找到结点P , 栈中元素均为结点P 的祖先

从根结点到P 结点的路径为

沿左分支向下

本题不要求输出遍历序列,

这里只出栈

沿右分支向下

结束算法

为叶结点

从根结点到P 结点的路径为

输出从根到叶子q 的路径上的所有袓先

4. 设从键盘输入一整数的序列:a 1,a 2,a 3,... ,a n ,试编写算法实现:用栈结构存储输入的整数,

时,将

入栈;当

时,输出栈顶整数并出栈。算法应对异常情况(入栈满等) 给

出相应的信息。

【答案】算法如下

:

栈空间容量

//s是元素为整数的栈,本算法进行入栈和出栈操作

//top为栈顶指针,定义top =0时为栈空

//n个整数序列进行处理

//从键盘读入整数序列

//读入的整数不等于﹣1时人栈

//读入的整数等于﹣1时出栈

第 3 页,共 36 页

//算法结束。

5. 已知两个链表A 和B 分别表示两个集合,其元素递增排列。编一函数,求A 与B 的交集,并存放于A 链表中。

【答案】算法如下:

//设工作指针pa 和pb ;

//结果表中当前合并结点的前驱的指针

//交集并入结果表中

//释放结点空

//释放结点空间

//释放结点空间

//置链表尾标记

//注:本算法中也可对B 表不作释放空间的处理

二、应用题

6. 设有6个有序表A 、B 、C 、D 、E 、F , 分别含有10、35、40、50、60和200个数据元素, 各表中元素按升序排列。要求通过5次两两合并, 将6个表最终合并成1个升序表, 并在最坏情况下比较的总次数达到最小。请回答下列问题。

(1)给出完整的合并过程, 并求出最坏情况下比较的总次数。 (2)根据你的合并过程, 描述

个不等长升序表的合并策略, 并说明理由。

【答案】(1)6个表的合并顺序如下图所示。

对应于合并过程的哈夫曼树

根据上图中的哈夫曼树, 6个序列的合并过程为:

第1次合并:表A 与表B 合并, 生成含45个元素的表AB ; 第2次合并:表AB 与表C 合并, 生成含85个元素的表ABC ;

第 4 页,共 36 页