数据结构之 图的存储结构

图的存储结构

内存物理位置是线性的,图的元素关系是平面的 

邻接矩阵(无向图)

图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

数据结构之 图的存储结构

无向图的邻接矩阵是对称矩阵(0表示不存在顶点间的边,1表示顶点间存在边)。

邻接矩阵(有向图)

数据结构之 图的存储结构

有向图的邻接矩阵不是对称矩阵,V1列之和表示V1的入度,V1的行之和表示出度。

邻接矩阵(网)

数据结构之 图的存储结构

邻接表(无向图)

邻接表(AdjacencyList),把数组和链表结合一起来存储。用一个一维数组存储顶点,可以是数组(较容易读取顶点信息,更加方便)也可以是单链表。图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,故而用单链表存储。

数据结构之 图的存储结构

邻接表(有向图)

表示每个顶点的出度,只能表示出度或者入度,不能同时表示。

数据结构之 图的存储结构

有向图的逆邻接表

数据结构之 图的存储结构
十字链表

顶点  顶点   入度指针   出度指针
数据结构之 图的存储结构

数据结构之 图的存储结构

邻接多重表

边表结构:

  指向依附于顶点iVex的下一条边   指向依附于顶点jVex的下一条边
iVex iLink jVex jLink

iVex和jVex是与某条边依附的两个顶点在顶点表中的下标

邻接多重表,边表结构存放的是一条边,而不是一个顶点。

边集数组

边集数组是由两个一维数组构成,一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin)、终点下标(end)和权(weight)组成。 

数据结构之 图的存储结构