其他分享
首页 > 其他分享> > 数据结构 图有些想法

数据结构 图有些想法

作者:互联网

图的定义与术语

1.图的基本定义

图是一种网状数据结构
有向图:有箭头边指向的图
无向图:无箭头边指向的图

2.图的基本术语:

图的存储结构

1.邻接矩阵表示法

也叫数组表示法。

① 对于无权的无向图(或有向图),邻接矩阵有如下性质:
如果

如图:
在这里插入图片描述
邻接矩阵是:
在这里插入图片描述
比如V1和V2两个结点相连,则在矩阵里面,[1, 2] = 1 ,[2, 1] = 1
( [i, j],1<= i <=5,1<= j <=5 )

该矩阵是对称矩阵。
对于有向图,求解过程差不多。

② 对于有权的有向图(或无向图),邻接矩阵有如下性质:
如果

如下有向图:
在这里插入图片描述

邻接矩阵为:
在这里插入图片描述
说明:如V1结点到V2结点,该路径权值为6。

而且对于有权有向图:横向看某一行,值不为无穷的个数就是该节点的出度数。纵向看某一列,值不为无穷的个数就是该节点的入度数。(无权有向图类似,判断一下矩阵里面数值为1或0的个数)

邻接矩阵特点:

2.邻接表表示法

基于邻接矩阵的缺陷提出的,高效存储图的关联信息的数据结构。
结构:
① 表头结点表
在这里插入图片描述
② 弧结点结构(边表)
在这里插入图片描述
③ 实例

该有向图邻接表里面,数据域的值可以理解是字母顺序对应的数值(如A是1,B是2,当然也可以放其他值)
横向看每一行,结点数就是出度数,如A结点的出度数是2
如果按照之前的做法给邻接表的数据域赋值(按字母顺序顺序,如A是1,B是2),那么在整个邻接表中,值为1的结点个数就是A结点的入度数,A的入度数为1,依次类推。

如果要判断有向图,任意两点之间是否有边就比较麻烦。如果要求解第i个顶点的入度,就需要遍历整个邻接表。
所以就有了逆邻接表法解决该问题。

3.逆邻接表

对每个顶点Vi ,建立一个所有以顶点Vi为弧头的表,如图:
在这里插入图片描述
逆邻接表是:
在这里插入图片描述

对于A结点,横向看,只有一个节点,所以A结点的入度数是1。亦可知入度结点是D。

4.十字链表

有向图要构造邻接表和逆邻接表比较麻烦,所以结合这两张表的特点产生了十字链表。

标签:有些,有向图,路径,结点,想法,邻接矩阵,邻接,顶点,数据结构
来源: https://blog.51cto.com/u_14175378/2760045