数据结构(10)图的概念、存储
创始人
2024-03-17 10:49:59
0次

目录

10.1.概念

10.2.存储

10.2.1.邻接矩阵

10.2.2.邻接表


10.1.概念

定义:

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

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

分类:

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

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

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

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

符号表示:

顶点集合

V
边的集合E

无向边

(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)之间没有边。

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

ABCDE
A01001
B10110
C01010
D01101
E10010

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

10.2.2.邻接表

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

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

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

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...