描述图的两种数据结构 - 邻接表和邻接矩阵

简介: 描述图的两种数据结构 - 邻接表和邻接矩阵

图的邻接表和邻接矩阵是两种常用的表示图的数据结构,用于描述图中各个顶点之间的连接关系。


图是由一组顶点和一组边组成的数据结构,顶点表示图中的对象,边表示对象之间的关系。邻接表和邻接矩阵都可以有效地表示图的结构,并提供了不同的优势和适用场景。


邻接表:

邻接表是一种链表的集合,用于表示图中每个顶点以及与之相邻的顶点。对于每个顶点,邻接表中都有一个链表,链表中存储着与该顶点直接相连的其他顶点。

示例:

考虑下面这个无向图:

A
    / \
   B---C
  / \ / \
 D---E---F


使用邻接表来表示该图的结构如下:


A -> B -> C
B -> A -> C -> D -> E
C -> A -> B -> E -> F
D -> B -> E
E -> B -> C -> D -> F
F -> C -> E


在这个示例中,每个顶点都对应一个链表,链表中存储与该顶点直接相连的其他顶点。例如,顶点A对应的链表包含顶点B和C,顶点B对应的链表包含顶点A、C、D和E,以此类推。


邻接表的优点是对稀疏图(边数相对顶点数较少)非常高效。它节省了存储空间,因为只需要存储与每个顶点相邻的顶点列表。在图中添加或删除边的操作上,邻接表的时间复杂度为O(1)。然而,查找特定边的操作相对较慢,时间复杂度为O(V),其中V是顶点的数量。


邻接矩阵:

邻接矩阵是一个二维矩阵,用于表示图中顶点之间的连接关系。矩阵的行和列分别代表图中的顶点,矩阵中的元素表示对应顶点之间是否存在边。

示例:

继续使用上述无向图的示例,使用邻接矩阵来表示该图的结构如下:

A  B  C  D  E  F
A   0  1  1  0  0  0
B   1  0  1  1  1  0
C   1  1  0  0  1  1
D   0  1  0  0  1  0
E   0  1  1  1
  0  1
F   0  0  1  0  1  0


在这个示例中,矩阵中的元素表示对应顶点之间是否存在边,1表示存在边,0表示不存在边。例如,第一行第二列的元素为1,表示顶点A与顶点B之间存在边。


邻接矩阵的优点是在查找特定边的操作上非常高效,时间复杂度为O(1)。同时,邻接矩阵还可以方便地进行图的遍历和某些图算法的实现。然而,邻接矩阵需要较大的存储空间,因为它需要一个二维矩阵来表示所有顶点之间的连接关系。在稀疏图的情况下,邻接矩阵可能会浪费大量的存储空间。


综上所述,邻接表和邻接矩阵都是常用的图的表示方法,各自适用于不同的场景。邻接表适合表示稀疏图,可以节省存储空间,并且对于添加或删除边的操作效率较高。邻接矩阵适合表示稠密图,可以快速查找特定边,并方便进行图的遍历和一些算法的实现。根据图的特点和需求,选择适合的表示方法可以提高图算法的效率和性能。

相关文章
|
6月前
|
存储 算法
描述图的两种数据结构 - 邻接表和邻接矩阵
描述图的两种数据结构 - 邻接表和邻接矩阵
63 0
|
存储 机器学习/深度学习 人工智能
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
|
9月前
|
存储 算法
【数据结构】图邻接矩阵的创建完整代码
【数据结构】图邻接矩阵的创建完整代码
197 0
数据结构186-邻接矩阵表示1
数据结构186-邻接矩阵表示1
53 0
数据结构186-邻接矩阵表示1
数据结构187-邻接矩阵表示1
数据结构187-邻接矩阵表示1
42 0
数据结构187-邻接矩阵表示1
|
存储 机器学习/深度学习 数据建模
【数据结构】图的存储结构—邻接矩阵
【数据结构】图的存储结构—邻接矩阵
682 0
【数据结构】图的存储结构—邻接矩阵
|
存储
图 无向网 采用邻接矩阵存储结构 按深度优先搜索和广度优先搜索遍历图 (DFS,BFS)实验报告 数据结构
图 无向网 采用邻接矩阵存储结构 按深度优先搜索和广度优先搜索遍历图 (DFS,BFS)实验报告 数据结构
104 0
图 无向网 采用邻接矩阵存储结构 按深度优先搜索和广度优先搜索遍历图 (DFS,BFS)实验报告 数据结构
|
存储
数据结构(八):邻接表与邻接矩阵
邻接表和邻接矩阵是图的两种常用存储表示方式,用于记录图中任意两个顶点之间的连通关系,包括权值。 对于图 而言,其中 表示顶点集合, 表示边集合。
2271 0
|
存储 算法
数据结构例程——图的邻接矩阵存储结构及算法
本文是[数据结构基础系列(7):图]中第4课时[图的邻接矩阵存储结构及算法]的例程。 #include <stdio.h> #include <malloc.h> #define MAXV 100 /*最大顶点数设为100*/ #define LIMITLESS 9999 typedef struct { int no;
1241 0
|
存储 机器学习/深度学习 算法
数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
本文是[数据结构基础系列(7):图]中第4课时[图的邻接矩阵存储结构及算法]和第5课时[图的邻接表存储结构及算法],并为后续内容的实践提供支持。   图的存储结构主要包括邻接矩阵和邻接表,本算法库提供存储结构的定义,以及用于构造图存储结构、不同结构的转换及显示的代码。算法库采用程序的多文件组织形式,包括两个文件:      1.头文件:graph.h,包含定义图数据
1765 0