邻接表是图论中常用的一种数据结构。
邻接表与邻接矩阵有相似的作用:用于储存一个图中所有的节点,但是邻接矩阵比较浪费内存,当数据较小时,邻接矩阵还可以计算
但是一旦数据较大,用邻接矩阵往往就会超时或者超内存,这时就要使用邻接表来存图了;为方便理解邻接矩阵与邻接表的储存方式。
我们先规定一组数据
1 10 3 5 8 9
我们将所给的点标记为 1,其余为 0 (1)邻接矩阵(适合小数据点稠密型图)
/ | |||||||||
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
我们可以看到虽然只有三个点我们却不得不开一个 10x10 的二维数组来存放数据这极大的浪费了空间
当遍历图时如果数据过大还可能会超时;那么邻接表呢?
(2)邻接表:(适合大数据点稀疏型图)
还是以上三个点
V1————>V10
V3————>V5
V8————>V9
只需要一个链即可完成 大大的节省了内存;详情如下图:
下边附上构建邻接表的通用模板:
|
|
参考文章: 如何构建邻接表【模板】【邻接表与邻接矩阵的选择】