7、非线性结构——图

本文详细介绍了图的定义,包括无向图与有向图的概念,以及顶点、边的关系。接着重点讨论了图的四种存储结构:邻接矩阵、邻接表、十字链表和邻接多重表,分析了它们的优缺点,特别是针对有向图和无向图的优化。此外,还提及了图的连通性相关术语,如连通图、强连通图和生成树。
摘要由CSDN通过智能技术生成

图的定义

  • 在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后驱。

  • 在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中的多个元素相关,但只能和上一层中一个元素相关。

  • 图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
    在这里插入图片描述在这里插入图片描述
    定义中注意事项:

  • 在图中数据元素,我们称之为顶点(Vertex)。

  • 图结构中不允许没有顶点。

  • 在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边表示。

     之后的术语其实记不记都无所谓,只有当真正用到的时候明白就好了,其实术语都是顾名思义的。
    

图定义——名词解释

  • 无向边(Edge),用无序偶对(v1 ,v2)来表示,如果图中任意两个顶点之间都是无向边,则该图称为无向图(Undirected graphs)。
  • 有向边:若从一个顶点到另一个顶点之间有方向,则称为有向边,也称为弧(Arc)。用有序偶<vi ,vj>来表示, vi称为弧尾(Tail),vj称为弧头(Head)。如果图中任意两个顶点之间的边都是有向边,则称该图为有向图(Directed graphs).
  • 在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。
  • 无向完全图/有向完全图:任意两个顶点之间都存在边。
  • 稠密图/稀疏图:顾名思义,边少的和边多的。
  • 网(network):带权的图

图的顶点与边间关系

  • 对于无向图 G = (V ,{E}),如果边 (v, v’) ∈ E,则称顶点 v 和 v’ 互为领接点 ,边( v,v’)依附于顶点 v 和 v’, 顶点 v 的(Degree)是和 v 相关联的边的数目,记为 TD(v)
  • 对于有向图 G = (V ,{E}),如果 <v, v’> ∈ E ,则称顶点 v 邻接到 顶点 v’ ,以顶点 v 为头的弧的数目称为 v 的入度(InDegree),记为 ID (v),以 v 为尾的弧的数目称为 v 的出度 (Outdegree),记为 OD(v) ,顶点 v 的 度是出度与入度的和
  • 路径的长度是路径上的边或弧的数目。第一个顶点到最后一个顶点相同的路径称为回路或环。序列中顶点不重复出现的路径称为简单路径,除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。

连通图相关术语

  • 在无向图中,如果从顶点 v 到 顶点 v’有路径,则称 v 和 v’ 是联通的,如果对于图中任意两个顶点 vi , vj 都是连通的,则称 G 是连通的(Connected Graph)。
  • 无向图中的极大连通子图称为连通分量
  • 要是子图
  • 子图要是相连的
  • 连通子图含有极大顶点数
  • 具有极大顶点数的连通子图包含依附于这些顶点的所有边。
  • 在有向图 G中,如果对于每一对 vi ,vj ∈ V ,vi 到 v j 和 从 v j 到 vi 都存在路径,则称 G 是强连通图。有向图中的极大强连通子图称作有向图的强连通分量。
  • 无向图中连接 n 个顶点 n-1 条边叫生成树。有向图一顶点入度为 0 其余顶点入度为 1 的叫有向树。一个有向图有若干棵有向树构成生成森林。

图的抽象数据类型 重要

在这里插入图片描述

图的存储结构

图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系,也就是说,图不可能用简单的顺序存储结构来表示。
多重链表虽然可以实现,但如果各个顶点度数相差很大,按度数最大的顶点设计结点结构会造成很多存储单元的浪费,而按每个顶点自己的度数设计不同的顶点结构,又带来操作的不便。

所以有了以下的存储结构。

1.邻接矩阵

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

设图 G 有 n 个顶点,则邻接矩阵是一个 n * n 的方阵,定义为:
在这里插入图片描述
实例,无向图用邻接矩阵后,图的边和顶点的度都很好表示。

在这里插入图片描述
有向图同样如此。在这里插入图片描述
加入权值(网的表示):在这里插入图片描述
在这里插入图片描述

邻接矩阵存储的结构,代码如下:

typedef int Status;	/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值