程序员需要了解的数据结构-图(Graph)

研发玩点艰辛事 2024-03-06 10:13:11
A)"图"结构的不同分类.

1)按照边或者顶点个数约束来分类.

零图(Null graph):只有顶点没有边的图;

平凡图(Trivial graph):只有一个顶点的图;

2)按照边是否有方向来分类.

有向图(Directed Graph):在每个边的定义中,节点都是有序的对。也就是(A,B)与(B,A)表示不同的边,一个代表从A到B方向的边,一个代表从B到A方向的边。

无向图(Undirected Graph):边只是代表链接,没有指向性。(A,B)与(B,A)表示的同样的边。

3)按照是否在边上存储权重数据分类.

权重图(Weighted Graph):图中的边上附加了权重或值的图。这些权重表示连接两个节点之间的距离、代价、容量或其他度量。权重可以是任何数值,通常用于描述节点间的关系特性。

"图"数据结构的分类

B)"图"结构的数据存储与表达.

1)邻接矩阵(Adjacency Matrix)

以二维数组中的行和列分别代表图中的顶点,矩阵中的元素的值表示各顶点之间是否连接或连接的边的权重。

邻接矩阵(Adjacency Matrix)

优点:方便检查任意一对顶点间是否存在边

方便查找任一顶点的所有“邻接点”

方便计算任一顶点的“度”

缺点: 浪费时间(统计稀疏图中一共有多少边)

浪费空间(点很多,边很少)

2)邻接表(Adjacency List)

首列列表 List 代表图中各个点,图中的每个节点都有一个对应的列表,用于存储与该节点直接相连的其他节点的信息。

邻接表(Adjacency List)

优点:方便查找任一顶点的邻接点

节约稀疏图的空间,需要N个头指针+2E个节点

缺点: 不方面检查任意一对顶点是否存在边

对有向图只能计算出度;需要构造“逆邻接表”来计算入度

C)"图"结构的遍历.

1)深度优先遍历。

2)广度优先遍历。

0 阅读:1

研发玩点艰辛事

简介:感谢大家的关注