• 链式存储结构

数据结构(知识点碎片三十)_孩子存储

  • 孩子存储结构(邻接表)

图的邻接表是一种顺序与链式存储相结合的存储方法。

数据结构(知识点碎片三十)_结点_02

邻接表的特点如下:
(1)邻接表的表示不唯一,这是因为在每个顶点对应的单链表中各边结点的链接次序可以是任意的,取决于建立邻接表的算法以及边的输入次序。
(2)对于有n个顶点和e条边的无向图,其邻接表有n个头结点和 2e 个边结点;对于有n个顶点和e条边的有向图,其邻接表有n个头结点和e个边结点。显然,对于边数目较少的稀疏图,邻接表比邻接矩阵更节省存储空间。
(3)对于无向图,邻接表中顶点i对应的第i个单链表的边结点数目正好是顶点i的度。
(4)对于有向图,邻接表中顶点i对应的第i个单链表的边结点数目仅仅是顶点i的出度。顶点i的入度为邻接表中所有adjvex 域值为i的边结点数目。
(5)在邻接表中,查找顶点i关联的所有边是非常快速的,所以在需要提取某个顶点的所有邻接点的算法中通常采用邻接表存储结构。

  • 逆邻接表

由于在有向图的邻接表中只存放了以一个顶点为起点的边,所以不易找到指向该顶点的边,为此可以设计有向图的逆邻接表。所谓逆邻接表(inverse adjacency list),就是在有向图的邻接表中对每个顶点链接的是指向该顶点的边。

数据结构(知识点碎片三十)_链表_03

  • 十字链表

十字链表有向图的另一种存储结构,它是邻接表和逆邻接表的结合。

数据结构(知识点碎片三十)_邻接表_04

  • 邻接多重表

邻接多重表是无向图的另外一种存储结构,与十字链表类似。

数据结构(知识点碎片三十)_链表_05