数据结构(10)图的概念、存储

简介: 10.1.概念定义:图,用来表示多对多的关系,比如地图里城市之间的通路、比如人际关系。图由顶点和边组成,顶点是图里的每个结点,边是顶点之间的通路,可以一条边都没有,但是不能一个顶点都没有。

10.1.概念

定义:

图,用来表示多对多的关系,比如地图里城市之间的通路、比如人际关系。

图由顶点和边组成,顶点是图里的每个结点,边是顶点之间的通路,可以一条边都没有,但是不能一个顶点都没有。

分类:

图按照边分,可分为两种:

  • 有向图,边是有方向的,A—>B表示A可以到B,B不能到A。
  • 无向图,边是无方向的,A—B表示A可以到B,B也可以到A。

图按照点与边的数量,可分为两种:

  • 稀疏图,点多边少
  • 稠密图,点少边多
  • 完全图,特殊的稠密图,每个顶点间都有边相连。

符号表示:

顶点集合

V
边的集合 E

无向边

(V,W),表示V,W双向连通

有向边

<V,W>,表示V—>W。

10.2.存储

图有两种存储方式:

  • 邻接矩阵
  • 邻接表

10.2.1.邻接矩阵

邻接矩阵,用一个二维的数组表示图。

G[i][j]=1,表示V(i)、V(j)之间有一条边。

G[i][j]=0,表示V(i)、V(j)之间没有边。

以一个无向的稀疏图的存储为例:

bf91126b7c5240069c6c49d13f6a56c7.png

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

可以看到用邻接矩阵存放点多边少的图,会存在大量记录都是0,没有任何意义,浪费了大量内存,因此,邻接矩阵适合存放稠密图(尤其是完全图)、不适合存放稀疏图(会有大量内存被浪费)。

10.2.2.邻接表

邻接表,用一组链表来表示图,每一条链表表示某个顶点和其他顶点的连同关系。

以一个稠密的无向图的存储为例:

8b0e061b65c948eb8602c46bbf0997cf.png

可以看到邻接表里单个结点间的连接关系被多次重复描述也浪费了不必要的内存,因此,邻接矩阵适合存放稀疏图、不适合存放稠密图。

目录
相关文章
|
30天前
|
存储 SQL Java
bigdata-18-Hive数据结构与存储格式
bigdata-18-Hive数据结构与存储格式
22 0
|
1月前
|
存储 算法 Go
Golang 数据结构:图
Golang 数据结构:图
46 0
|
29天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
47 0
|
12天前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
19 1
|
28天前
|
存储 C语言
【数据结构】线性表的链式存储结构
【数据结构】线性表的链式存储结构
18 0
|
28天前
|
存储 vr&ar
数据结构的图存储结构
数据结构的图存储结构
26 0
|
29天前
|
存储 NoSQL Redis
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)(三)
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)
31 0
|
30天前
|
存储 算法 搜索推荐
数据结构-概念版(七)
数据结构-概念版
49 0
|
30天前
|
存储 算法 Serverless
数据结构-概念版(六)
数据结构-概念版
38 0
|
30天前
|
存储 机器学习/深度学习 算法
数据结构-概念版(二)
数据结构-概念版
32 0