2014年数据结构应用题深度解析

2014年数据结构应用题

做题感受

恶心 答案更是恶心 把这个答案读出来更是恶心!

题目

基本思路

第一小问

  • (1)首先对于这个小问而言 显然是将该网络抽象为网图或者图
  • 具体原因:首先逻辑结构 分为线性和非线性 显然这个网络是属于非线性结构 而对于非线性结构而言我们熟知的就是图和树 但是这个网络它并不具有明显的层级结构 所以应该将这个网络抽象为图来存储

第二小问

  • (2)基于第一小问 我们将该网络抽象为图 而对于图我们一般采用邻接矩阵或者邻接表来存储
    而题目要求我们采用链式存储结构 所以显然考察的我们邻接表的相关知识 而且特殊的考察的是网图 我们不仅需要存储每个节点的信息还需要保存 权值
  • 所以题目要求给出链式存储结构的类型定义 我们应该这么来思考:
  • 我们可以将我们需要保存的这张表格纵向来看 也就是从一个路由器出发 保存它所有邻居节点的信息 而对于这道题而言 这个邻居不仅有邻居路由器还有与它直连的网络 所以我们在定义结构体的时候我们需要分别来定义
  • 我们当前基本思路:
  • 1 首先保存我们当前节点的IP地址 然后还需要两个指针 他们分别指向邻居路由器和直连网络 然后我们再此基础之上分别把这两种数据类型给他定义一下就好了 因为这两种需要保存的内容是不一样的
  • 我们邻居路由器当中应该保存的是 ID IP 权值Metric 我们的直连网络节点当中他应该保存的是网络IP地址和子网掩码 以及权值Metric
  • 最后由于我们现在只是保存了从一个路由器出发到达它邻居结点的信息 但是我们需要保存的整个链路状态信息 所以我们需要将它穿起来 所以还需要定义一个指向下一个相同节点类型的指针
  • 其实我觉得采用数据才存储头结点也是可以的 那么就需要在结构体的末尾定义一个相同类型的数组来保存我们的节点信息 这个是和邻接表是一致的
  • 这就是第二小问的基本框架 其实我不太建议大家跟标准答案那样写 其实真正在考场上面是根本想不到的
  • 所以我觉得总的来说就是联想到网图的一个存储方式和结构体的类型定义 然后类比到我们这道题 这是一个比较可行的考场思路
结构类型定义
cpp 复制代码
//从某个路由器出发
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!

相关推荐
艾莉丝努力练剑5 小时前
【C++STL :stack && queue (三) 】优先级队列的使用以及底层实现
linux·开发语言·数据结构·c++·stl
im_AMBER7 小时前
数据结构 06 线性结构
数据结构·学习·算法
earthzhang20219 小时前
【1028】字符菱形
c语言·开发语言·数据结构·c++·算法·青少年编程
papership9 小时前
【入门级-算法-3、基础算法:二分法】
数据结构·算法
hjlgs9 小时前
Linux中双向链表介绍
数据结构·链表
earthzhang202111 小时前
第3讲:Go垃圾回收机制与性能优化
开发语言·jvm·数据结构·后端·性能优化·golang
best_virtuoso13 小时前
PostgreSQL 常见数组操作函数语法、功能
java·数据结构·postgresql
无敌最俊朗@14 小时前
数组-力扣hot56-合并区间
数据结构·算法·leetcode
码农多耕地呗15 小时前
力扣94.二叉树的中序遍历(递归and迭代法)(java)
数据结构·算法·leetcode