数据结构学习笔记——图

数据结构学习笔记——图

在数据结构中数据之间的关系主要有两种:线性关系以及非线性关系。其中,非线性关系可以分为树型关系和图关系。图是一种常见的数据结构,图中任何两个顶点都可能有关联,顶点之间是多对多的关系。

图的概念

  1. 图的定义
    维基百科中对图的定义:在数学的分支图论中,图(Graph)用于表示物件与物件之间的关系,是图论的基本研究对象。一张图由一些小圆点(称为顶点或结点)和连结这些圆点的直线或曲线(称为边)组成。
  2. 有向图和无向图
    如果给图的每条边规定一个方向,那么得到的图称为有向图,其边也称为有向边。在有向图中,与一个节点相关联的边有出边和入边之分,而与一个有向边关联的两个点也有始点和终点之分。相反,边没有方向的图称为无向图。其中还有一个改建是网,所谓网络就是边上有权值的图。无向网就是边上有权值的无向图,一般而言,无向图重点在于无向,有无权值不定。

图的存储结构

为了便于计算机处理图的问题,需要把图的各顶点之间的连接关系输入到计算机中。一般我们采用邻接矩阵以及邻接表来进行图的存储表示。
邻接矩阵
邻接矩阵是用来表示图中顶点之间的邻接关系的矩阵。其中矩阵的每一行分别对应图的各个顶点;矩阵的每一列分别对应图的各个顶点。对于无向图以及无向网,其邻接矩阵是对称矩阵;对于无向带权图,即图的各个边是带权的,那么就用边的权值作为邻接矩阵对应元素的值。
邻接矩阵的性质
1.图中各顶点序号确定后,图的邻接矩阵是唯一的;
2.无向图和无向网的邻接矩阵是一个对称阵;
3.无向图邻接矩阵第i行(或第i列)的非0元素的个数为第i个顶点的度
4.有向图邻接矩阵第i行非0元素个数为第i个顶点的出度(对有向图中某节点的孤尾数),第i列非0元素的个数为第i个顶点的入度(对有向图中某节点的孤头数),第i个顶点的度为第i行第i列非0元素个数之和;
5.无向图的边数等于邻接矩阵中非0元素个数之和的一半,有向图的,有向图的弧数等于邻接矩阵中非0元素个数之和。
邻接表
邻接表是图的一种链接存储结构。在邻接表表示法中,用一个顺序存储区域来存储图中各顶点的数据,并在图中每上顶点vi建立一个单链表,把顶点vi的所有相邻顶点,即其后继顶点的序号链接起来。
邻接表的性质
1.图的邻接表表示不是唯一的,它与表结点的链入次序有关;
2.无向图的邻接表中第i个边表的结点个数即为第i个顶点的度;
3.有向图的邻接表中第i个出边表的结点个数即为第i个结点的出度,有向图的逆邻接表中第i个入边表的节点个数即为第i个结点的入度;
4.无向图的边数等于邻接表中边表结点数的一半,有向图的弧数等于邻接表(逆邻接表)中出边表结点(入边表结点)的数目。
邻接表与邻接矩阵的关系
1.对应于邻接矩阵的每一行有一个线形链接表;
2.链接表的表头对应着邻接矩阵该行的顶点;
3.链接表中的每个节点对应着邻接矩阵中该行的一个非0元素;
4.对于无向图,一个非0元素表示与该行顶点相邻的另一个顶点;
5.对于有向图,非0元素则表示该行顶点为起点的一条边的终点。

图的遍历

定义:从图中的某个顶点出发,访问图中所有的顶点,且使得没一顶点仅仅被访问一次,这一过程被称为图的遍历。
遍历方法:图的遍历按住奥搜索路径不同分为深度优先搜索遍历(DFS)和广度优先搜索遍历(BFS)。

  1. 深度优先搜索遍历
    假定给定图G的初态是多有顶点均没有被访问过,在G中任意选一个顶点v作为初始出发点,则深度优先搜索定义为:从指定的起点v出发(先访问v,并将其标记为已访问过),访问它的任意相邻接的顶点w1,再访问w1的任意一个没有访问的相邻接顶点w2,如此下去,直到某顶点已经没有被访问过的邻接顶点或者它的所有邻接顶点都已经被访问过了,就回溯到它的前驱。如果这个访问和回溯过程返回到遍历开始的顶点,就结束遍历过程。如果图中仍然存在一些没有被访问过的结点,就另外选一个没有被访问过的结点重新开始深度优先搜索遍历。
    对图进行深度优先搜索遍历是一个递归的过曾,其特点时尽可能对纵深方向的顶点进行访问。
  2. 广度优先搜索遍历
    假设图G的初态是所有顶点均未访问过,在G中任意选择一个顶点v作为初始出发点,则广度优先搜索遍历的基本思想是:从指定的起点v出发,访问与它相邻的所有顶点w1,w2,…;然后再依次访问w1,w2,…邻接的还没有被访问过的所有顶点,再从这些顶点出发访问与它们相邻的尚未被访问的顶点,直到所有顶点均被访问过为止。如果图中仍存在一些未访问过的结点,就另外选择一个没有被访问过的结点重新开始广度优先搜索遍历。
    对图进行广度优先搜索遍历是一个递归的过曾,其特点时尽可能对横向的顶点进行访问。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值