数据结构之 图的存储结构
图的存储结构
内存物理位置是线性的,图的元素关系是平面的
邻接矩阵(无向图)
图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。
无向图的邻接矩阵是对称矩阵(0表示不存在顶点间的边,1表示顶点间存在边)。
邻接矩阵(有向图)
有向图的邻接矩阵不是对称矩阵,V1列之和表示V1的入度,V1的行之和表示出度。
邻接矩阵(网)
邻接表(无向图)
邻接表(AdjacencyList),把数组和链表结合一起来存储。用一个一维数组存储顶点,可以是数组(较容易读取顶点信息,更加方便)也可以是单链表。图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,故而用单链表存储。
邻接表(有向图)
表示每个顶点的出度,只能表示出度或者入度,不能同时表示。
有向图的逆邻接表
十字链表
顶点 顶点 入度指针 出度指针
邻接多重表
边表结构:
指向依附于顶点iVex的下一条边 | 指向依附于顶点jVex的下一条边 | ||
iVex | iLink | jVex | jLink |
iVex和jVex是与某条边依附的两个顶点在顶点表中的下标
邻接多重表,边表结构存放的是一条边,而不是一个顶点。
边集数组
边集数组是由两个一维数组构成,一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin)、终点下标(end)和权(weight)组成。