2014年数据结构应用题深度解析
2014年数据结构应用题
- 做题感受
- 题目
- 基本思路
- 第一小问
- 第二小问
- 结构类型定义
- 第三小问
- 总结
做题感受
恶心 答案更是恶心 把这个答案读出来更是恶心!
题目
基本思路
第一小问
- (1)首先对于这个小问而言 显然是将该网络抽象为网图或者图
- 具体原因:首先逻辑结构 分为线性和非线性 显然这个网络是属于非线性结构 而对于非线性结构而言我们熟知的就是图和树 但是这个网络它并不具有明显的层级结构 所以应该将这个网络抽象为图来存储
第二小问
- (2)基于第一小问 我们将该网络抽象为图 而对于图我们一般采用邻接矩阵或者邻接表来存储
而题目要求我们采用链式存储结构 所以显然考察的我们邻接表的相关知识 而且特殊的考察的是网图 我们不仅需要存储每个节点的信息还需要保存 权值 - 所以题目要求给出链式存储结构的类型定义 我们应该这么来思考:
- 我们可以将我们需要保存的这张表格纵向来看 也就是从一个路由器出发 保存它所有邻居节点的信息 而对于这道题而言 这个邻居不仅有邻居路由器还有与它直连的网络 所以我们在定义结构体的时候我们需要分别来定义
- 我们当前基本思路:
- 1 首先保存我们当前节点的IP地址 然后还需要两个指针 他们分别指向邻居路由器和直连网络 然后我们再此基础之上分别把这两种数据类型给他定义一下就好了 因为这两种需要保存的内容是不一样的
- 我们邻居路由器当中应该保存的是 ID IP 权值Metric 我们的直连网络节点当中他应该保存的是网络IP地址和子网掩码 以及权值Metric
- 最后由于我们现在只是保存了从一个路由器出发到达它邻居结点的信息 但是我们需要保存的整个链路状态信息 所以我们需要将它穿起来 所以还需要定义一个指向下一个相同节点类型的指针
- 其实我觉得采用数据才存储头结点也是可以的 那么就需要在结构体的末尾定义一个相同类型的数组来保存我们的节点信息 这个是和邻接表是一致的
- 这就是第二小问的基本框架 其实我不太建议大家跟标准答案那样写 其实真正在考场上面是根本想不到的
- 所以我觉得总的来说就是联想到网图的一个存储方式和结构体的类型定义 然后类比到我们这道题 这是一个比较可行的考场思路
结构类型定义
//从某个路由器出发
typedef struct Node{int RounterID;//分别定义两个指针域用于指向邻居路由器和直连网络struct net_node * next1;struct LNode * next2;//由于我们需要的信息是整个网络的 所以我们需要将每个路由器与它邻居的信息穿起来struct Node *next;
}Node;
typedef struct LNode{int rounter_ID;int Link_IP;int Metric;struct LNode *next;
}LNode;
typedef struct net_node{int prefix;//网络IP地址int mask;//子网掩码int Mertic;struct net_node* next;
}NNODE;
第三小问
考察迪杰斯特拉算法 目的是给出R1到达所有子网的最短路径和对应权值之和
*我们可以给这个四个网络分别编号 :
NET1——192.1.1.0/24
NET2——192.1.5.0/24
NET3——192.1.6.0/24
NET4——192.1.7.0/24*
那么就可以得到R1到每个目的网络的最短路径 我们可以以表格的方式来呈现:
目的网络 路径长度(费用) 下一跳
NET 1 — 1 --------------------- 直连
NET 2 — 4 --------------------- R2
NET 3 — 9 --------------------- R2
NET 4 — 2----------------------- R3
总结
我觉得这道题在考场上面想要做对是要求很高的 尤其2014年的408在前面已经考了一个计算WPL的题 写的顺利还好 但是我觉得这对不熟悉树和图相关知识的朋友是非常折磨的 一开始就连空两道大题这是很难接受的
2014年数据结构大题 线性表一点不考 反倒将数组和链表融合到操作系统大题里面去了 真nm (# ^. ^ #)
选择还可以 但是大题整体做着就不是很舒服了 反倒我觉得计组是比较正常的难度 fighting!