图的矩阵表示法比较消耗空间,需要花费$ n 2 n^2 n2$个单元存储边(弧)。在边数较少的情况下比较浪费。我们这里来讨论图的链式存储结构。
图的链式结构主要有四类:邻接表、逆邻接表、十字链表、邻接多重表。
前两个算比较好理解的,后两个更复杂一点。
邻接表
实际上邻接表都是使用数组来存储顶点,然后对每一个顶点建立一个单链表,第i个但链表中的节点表示依附于顶点vi的边(对有向图是以vi为尾的弧)。以下分类只是一些很细微的区别。
无向图的邻接表
对无向图来说第i个单链表中的结点表示依附于顶点vi的边。
在G的邻接表中,同一条边对应两个结点。
无向图G的邻接表,顶点vi的度为第i个单链表的长度。
若无向图G有n个顶点和e条边,需n个表头结点和2e个表结点

有向图的邻接表
第i个单链表中的表结点,表示以顶点vi为尾的弧(vi,vj)的弧头。
若有向图G有n个顶点和e条弧,则需n个表头结点和e个表结点。
有向图G的邻接表,顶点vi的出度为第i个单链表的长度。
求顶点vi的入度需遍历全部单链表,统计结点值为i的结点数。

逆邻接表
逆邻接表也很好理解,只是将出度改为入度了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IkD5A5T-1625671611460)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210705235744239.png)]

本文详细介绍了图的四种链式存储结构:邻接表、逆邻接表、十字链表和邻接多重表。邻接表通过数组存储顶点,并为每个顶点建立单链表,存储与其相连的边。逆邻接表则用于存储顶点的入度。十字链表结合了邻接表和逆邻接表的优点,便于快速查找入度和出度。邻接多重表主要用于存储无向图,每个节点代表与两个顶点相关的边。这些结构在存储空间和效率上有各自的优势,适用于不同场景。
最低0.47元/天 解锁文章
1万+





