欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

假设以邻接矩阵作为图的存储结构_图的存储

发布时间:2023/12/10 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 假设以邻接矩阵作为图的存储结构_图的存储 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

因为图的结构特点,使得其在存储、遍历也相对复杂一些。

邻接矩阵存储图

最简单的方式就是将图的顶点用一维数组存储进来,然后将边信息存储在二维矩阵中,这两个数组合称为图的邻接矩阵(Adjacency Matrix)。

无向图的邻接矩阵

有向图的邻接矩阵

邻接表存储图

看上图邻接矩阵的结构,可以得知邻接矩阵中的边数组中存在大量为零的空占位,浪费了大量空间,所以就自然而然想到利用链表来进行边的存储,这就是邻接表(Adjacency List)。

无向图的邻接表

有向图的邻接表

有向图邻接表的边表为以弧尾为链表表头进行存储的,这样对于顶点的出度统计较为方便,而有向图逆邻接表则正好与邻接表相反,边表是以弧尾作为链表表头的。

有向图逆邻接表边表

网的邻接表

邻接多重表存储无向图

假如对无向图的邻接表进行删除某边操作时需要对相关结点进行遍历找到相应边然后进行删除,比较麻烦,故邻接多重表对其进行改良。

边表结构:

其中,ivex和jvex为某边依附的两顶点在顶点表中的下标,ilink指向依附顶点ivex的下一条边,同理jlink指向依附顶点jvex的下一条边。

邻接多重表结构

十字链表存储有向图

用邻接表存储有向图存在一个问题,对于某一顶点的弧统计还是很麻烦的,邻接表对于顶点作为弧头的弧统计很麻烦,逆邻接表对于顶点作为弧尾的弧统计很麻烦。所以为了对顶点更好的查询,便参考线索二叉树的设计思路,得到了十字链表(Orthogonal List)。

顶点表的结构为:

边表结构为:

其中,tailvex为弧尾在顶点表中的下标,headvex为弧头在顶点表中的下标,headlink指的是入边表指针域,指的是弧头相同的下一条边,taillink指的是出边表指针域,指的是弧尾相同的下一边。

十字链表存储示意

图中实线为邻接表,虚线为逆邻接表。

边集数组存储图

注意和邻接矩阵进行区别。

总结

以上是生活随笔为你收集整理的假设以邻接矩阵作为图的存储结构_图的存储的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。