2018年北京市培养单位电子电气与通信工程学院408计算机学科专业基础综合之数据结构考研仿真模拟五套题
● 摘要
一、算法设计题
1. 给定nxm 矩阵
并设
设计一算法判定x 的值是否在A 中,要求时间复杂度
为O(m+n) 。
【答案】算法如下:
//n*m矩阵A ,行下标从a 到b ,列下标从c 到d ,本算法査找x 是否在矩阵A 中
//flag是成功査到x 的标志
//假定x 为整型
(“矩阵A 中无
算法search 结束。
2. 已知递增有序的单链表A ,B 分别存储了一个集合,请设计算法以求出两个集合A 和B 的差集A ﹣B(即仅由在A 中出现而不在B 中出现的元素所构成的集合) ,并以同样的形式存储,同时返回该集合的元素个数。
【答案】算法如下:
//A和B 均是带头结点递增有序的单链表,本算法求两集合的差集,*n是结果集合中元素个数,初始为
//p和q 分别是链表A 和B 的工作指针
//pre为A 中p 所指结点的前驱结点的指针
//A
链表中当前结点指针后移
//B链表中当前结点指针后移
//处理A , B 中元素值相同的结点,
应刪除 //删除结点
第 2 页,共 34 页
元素\n",x) ;
3. 已知一棵二叉树的前序遍历序列和中序遍历序列分别存于两个一维数组中,试编写算法建立该二叉树的二叉链表。
【答案】算法如下:
根据二叉树前序序列pre 和中序序列in 建立二叉树。元素下标
申请结点
是根
在中序序列中,根结点将树分成左右
子树
无左子树
递归建立左子树
无右子树
递归建立右子树
结束:
4. 当一棵有n(
) 个结点的二叉树按顺序存储方式存储在
中时,试写一个算法,求和
是两个序列首、尾
出二叉树中结点值分别为X 和Y 的两个结点的最近公共祖先结点的值。
【答案】算法如下:
二叉树顺序存储在数组
中,本算法求结点i 和j 的最近公共祖先结点的值
下标为i 的结点的双亲结点的下标
下标为j 的结点的双亲结点的下标
所査结点的最近公共祖先的下标是
,值是
设元素类型为
整型
5. 线性表中元素存放在向量A(1,... ,,1) 中,元素是整型数。试写出递归算法求出A 中的最大和最小元素。
【答案】算法如下:
//一维数组A 中存放有n 个整型数,本算法递归的求出其中的最小数和最大数
//算法结束
第 3 页,共 34 页
二、应用题
6. 某网络中的路由器运行OSPF 路由协议, 下表是路由器R1维护的主要链路状态信息(LSI), 下图是根据下表及R1的接口名构造出来的网络拓扑。
表 R1所维护的
LSI
图 R1构造的网络拓扑
请回答下列问题。
本题中的网络可抽象为数据结构中的哪种逻辑结构?
针对上表中的内容, 设计合理的链式存储结构, 以保存上表中的链路状态信息(LSI)。要求给出链式存储结构的数据类型定义, 并画出对应上表的链式存储结构示意图(示意图中可仅以ID 标识节点) 。
按照迪杰斯特拉(Dijiksta)算法的策略, 依次给出R1到达上图中子网
第 4 页,共 34 页
的最短路径及费