从零开始学数据结构系列之第四章《图的存储结构》


图的存储结构

  由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系,也就是说,图不可能用简单的顺序存储结构来表示。而多重链表的方式,要么会造成很多存储单元的浪费,要么又带来操作的不便。因此,对于图来说,如何对它实现物理存储是个难题,接下来我们介绍几种不同的存储结构。

​   但目前我们用的是无序图,只用到了邻接矩阵这种存储结构,后面用到在进行讲解

什么是出度和入度


顶点的度是什么意思:

​   与某个顶点相连的边的数量


图中的度:

​   所谓顶点的度(degree),就是指和该顶点相关联的边数。

  • 无向图
    • v节点作为边节点的次数成为度(环的节点的度为2)
  • 有向图
    • 出度:v节点作为边起点的次数
    • 入度:v节点作为边终点的次数
    • 总度数:出度+入度
  • 孤立点:度数为0的点
  • 悬挂点:度数为1的点
  • 偶点:度数为偶数
  • 奇点:度数为奇数

邻接矩阵

​   图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

​   它是一种用于表示图的数据结构。它是一个二维数组,其中的元素表示图中顶点之间的连接关系。对于一个有n个顶点的图,邻接矩阵是一个大小为n×n的二维数组。要是图中有两个顶点(假设是第1个和第2个顶点)相连(存在一条边),那么他们对应在邻接矩阵中的第1行第2列和第2行第1列位置为1,其他没有相连的用0表示。

在这里插入图片描述
我们把有相连边的顶点拿出来:AB,AC,AD,BC,BD,DE,BE(不分先后)

因为顶点顺序为ABCDE,然后我们可以作出它的邻接矩阵:

因为顶点顺序为ABCDE,然后我们可以作出它的邻接矩阵:

邻接矩阵ABCDE
A01110
B10111
C11000
D11001
E01010

  观察发现无向图邻接矩阵是关于主对角线对称的,这使得后面可以通过邻接矩阵的对称性了解和运用图的一些性质。

  有了这个二维数组组成的对称矩阵,可以很容易地知道图中的信息:

​   ·要判定任意两顶点是否有边无边非常容易;

​   ·要知道某个顶点的度,其实就是这个顶点Vi在邻接矩阵中第i行(或第i列)的元素之和;

​   ·求顶点Vi的所有邻接点就是将矩阵中第i行元素扫描一遍,arc[i][j]为1就是邻接点。

邻接矩阵的性质

(1)图中各顶点确定后,图的邻接矩阵能唯一确定。

(2)无向图和无向网的邻接矩阵沿主对角线对称,且主对角线上元素为0;有向图和有向网的邻接矩阵不一定对称。

(3)无向图邻接矩阵的第i行(或第i列)的非零元素的个数即为第i个顶点的度。

(4)有向图邻接矩阵的第i行的非零元素的个数即为第i个顶点的出度,第i列的非零元素的个数即为第i个顶点的入度,第i个顶点的度等于第i行与第i列非零元素个数之和。

(5)无向图中边数等于邻接矩阵中非零元素个数之和的一半,有向图的弧数等于邻接矩阵中非零元素个数之和。

(6)图或网的邻接矩阵,需要一个具有n个元素的一维数组和一个具有n2个元素的二维数组存储,因此,其空间复杂度是0(n2)。

往期回顾

1.【第一章】《线性表与顺序表》
2.【第一章】《单链表》
3.【第一章】《单链表的介绍》
4.【第一章】《单链表的基本操作》
5.【第一章】《单链表循环》
6.【第一章】《双链表》
7.【第一章】《双链表循环》
8.【第二章】《栈》
9.【第二章】《队》
10.【第二章】《字符串暴力匹配》
11.【第二章】《字符串kmp匹配》
12.【第三章】《树的基础概念》
13.【第三章】《二叉树的存储结构》
14.【第三章】《二叉树链式结构及实现1》
15.【第三章】《二叉树链式结构及实现2》
16.【第三章】《二叉树链式结构及实现3》
17.【第三章】《二叉树链式结构及实现4》
18.【第三章】《二叉树链式结构及实现5》
19.【第三章】《中序线索二叉树理论部分》
20.【第三章】《中序线索二叉树代码初始化及创树》
21.【第三章】《中序线索二叉树线索化及总代码》
22【第三章】《先序线索二叉树理论及线索化》
23【第三章】《先序线索二叉树查找及总代码》
24【第三章】《后续线索二叉树线索化理论》
25【第三章】《后续线索二叉树总代码部分》
26【第三章】《二叉排序树基础了解》
27【第三章】《二叉排序树代码部分》
28【第三章】《二叉排序树代码部分》
29【第三章】《平衡二叉树基础概念》
30【第三章】《平衡二叉树的平衡因子》
31【第三章】《平衡二叉树的旋转基础详解》
32【第三章】《平衡二叉树的旋转类型图文详解》
33【第三章】《平衡二叉树的旋转类型总结及总代码》
34【第三章】《哈夫曼树简单了解》
35【第三章】《哈夫曼树的构造方法》
36【第三章】《哈夫曼编码构造及代码》
37【第三章】《图的定义》
38【第三章】《图的基本概念和术语》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值