目录
前言
无论是什么程序都要和数据打交道,一个好的程序员会选择更优的数据结构来更好的解决问题,因此数据结构的重要性不言而喻。数据结构的学习本质上是让我们能见到很多前辈在解决一些要求时间和空间的难点问题上设计出的一系列解决方法,我们可以在今后借鉴这些方法,也可以根据这些方法在遇到具体的新问题时提出自己的解决方法。(所以各种定义等字眼就不用过度深究啦,每个人的表达方式不一样而已),在此以下的所有代码都是仅供参考,并不是唯一的答案,只要逻辑上能行的通,写出来的代码能达到相同的结果,并且在复杂度上差不多,就行了。
一、什么是邻接多重表?
邻接多重表是无向图的一种存储结构。如果在无向图中我们的侧重点在顶点上,那么使用邻接表是很合适的,然而之前我们讨论过,当我们的侧重点在边上,也就是需要对边增删查改的时候,用邻接多重表就更加合适了
二、邻接多重表的构成
1.顶点集+边集
与十字链表一样,邻接多重表是由顶点集合和边集合构成的。但又与十字链表不同的是,邻接多重表是无向图的存储结构吗,而十字链表是针对有向图的。因为不考虑边的方向,所以和十字链表相比较,顶点结点只需要一个指针域指向所连接的边结点即可
顶点集VexNode由顶点的数据域data和指向顶点所连接的边节点的指针firstEdge构成
//顶点集
typedef struct VexNode
{
//顶点信息
char data;
//指向顶点所连接的边节点链表
ArcNode* firstEdge;
}VexNode;
而在边集中对于一条边来说,