邻接矩阵法
概念
一维数组存储图顶点信息
二维数组存储边的信息
(也就是顶点之间的邻接关系)
存储顶点之间邻接关系的二维数组
称为邻接矩阵图G=(V,E)
结点数为n,邻接矩阵A是n*n的
A[i][j]=1是E(G)中的边
A[i][j]=0不是E(G)中的边
带权重的话就是权值不是1和0了
注意
无向图的邻接矩阵是对称矩阵,对规模大的邻接矩阵可采用压缩存储
邻接矩阵表示法空间复杂度为O(n^2)
适用于稠密图
特点
无向图的邻接矩阵是一个对称矩阵(唯一)
所以实际存储时只需存储上(下)三角矩阵的元素
无向图,i行非0元素个数是顶点的度
有向图,i行非0元素个数是出度或入度
邻接表法
概念
减少稀疏图的浪费
每个顶点建立一个单链表,第i个单链表中结点表示依附于顶点Vi的边
单链表称为顶点的边表,有向图则是出边表
边表的头指针和顶点的数据信息采用顺序存储
特点
无向图,存储空间O(|V|+2|E|
有向图,存储空间O(|V|+|E|)
对于稀疏图,邻接表法极大地节省存储空间
邻接表很容易找出所有邻边,花费时间为O(n)
求出度只需计算邻接表中结点个数,求入度需要遍历所有邻接表
图的邻接表表示方法不唯一,取决于邻接表的算法及边的输入次序
十字链表
概念
有向图的链式存储结构
对应于有向图中每条弧有一个结点,对应于每个顶点也有一个顶点。
弧结点5个域
尾域
弧尾顶点的位置
头域
弧头顶点的位置
链域hlink
弧头相同的下一条弧
链域tlink
弧尾相同的下一条弧
info域
弧的相关信息
顶点结点3个域
data域
顶点相关数据信息,如顶点名称
firstin
弧头第一个弧结点
firstout
弧尾第一个弧结点
邻接多重表
概念
无向图的另一种链式存储结构