数据结构(四)----图

图是数据结构中的重要类型,分为有向图和无向图。有向图的边有方向,无向图的边无方向。连通分量和强连通分量分别描述了无向图和有向图中顶点的连接状态。顶点的度、入度和出度定义了顶点与边的关系。图的存储常用邻接矩阵和邻接表,邻接矩阵适合稠密图,邻接表则更节省空间对于稀疏图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构-----图

什么是图

图是数据结构中一种多对多的结构。而图又分为有向图和无向图。
接下来我们将会介绍两种图的概念和存储方式

有向图

若E是有向边(也称弧)的有限集合时,则图G为有向图。弧是顶点的有序对,记为<v, w>,其中v,w是顶点,v称为弧尾,w称为弧头,<v,w>称为从顶点v到顶点w的弧,也称v邻接到w,或w邻接自v。
在这里插入图片描述

无向图

若E是无向边(简称边)的有限集合时,则图G为无向图。边是顶点的无序对,记为(v, w)或(w,v),因为(v,w)=(w,v), 其中v,w是顶点。可以说顶点w和顶点v互为邻接点。边(v, w)依附于顶点w和v,或者说边(v, w)和顶点v, w相关联。
在这里插入图片描述

连通分量

在无向图中,若从顶点v vv到顶点w ww有路径存在,则称v vv和w ww是连通的。若图G GG中任意两个顶点都是连通的,则称图G GG为连通图,否则称为非连通图。无向图中的极大连通子图称为连通分量。若一个图有n nn个顶点,并且边数小于n − 1 n-1n−1,则此图必是非连通图。

强联通分量

在有向图中,若从顶点v vv到顶点w ww和从顶点w ww到项点v vv之间都有路径,则称这两个顶点是强连通的。若图中任何一对顶点都是强连通的,则称此图为强连通图。有向图中的极大强连通子图称为有向图的强连通分量。

顶点的度、入度和出度

图中每个顶点的度定义为以该项点为一个端点的边的数目。
对于无向图,顶点v的度是指依附于该顶点的边的条数,记为T D ( v ) TD(v)TD(v)。
在具有n个顶点、e 条边的无向图中,即无向图的全部顶点的度的和等于边数的2倍,因为每条边和两个顶点相关联。
对于有向图,顶点v vv的度分为入度和出度,入度是以顶点v vv为终点的有向边的数目,记为I D ( v ) ID(v)ID(v); 而出度是以顶点v vv为起点的有向边的数目,记为O D ( v ) OD(v)OD(v)。顶点v vv的度等于其入度和出度之和,即T D ( v ) = I D ( v ) + O D ( v ) 。 TD(v) = ID(v) + OD(v)。TD(v)=ID(v)+OD(v)。
在具有n个顶点、e 条边的有向图中即有向图的全部顶点的入度之和与出度之和相等,并且等于边数。这是因为每条有向边都有一个起点和终点。

边的权和网

在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值。这种边上带有权值的图称为带权图,也称网。

图的存储方式

领接矩阵表示法

图没有顺序映像的存储结构,但可以借助数组来表示数据元素之间的关系。
建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)
在这里插入图片描述
顶点表:(a,b,c,d)
邻接矩阵:
在这里插入图片描述
分析1:无向图的邻接矩阵是对称的;
分析2:顶点i 的度=第i 行 (列) 中1 的个数;
特别:完全图的邻接矩阵中,对角元素为0,其余全1。
有向带权图和它的邻接矩阵:
在这里插入图片描述有向图的邻接矩阵可能是不对称的。

邻接矩阵法优点:容易实现图的操作,如:判断顶点之间是否有边(弧)、找顶点的邻接点等等。

邻接矩阵法缺点:首先n个顶点需要N×N个单元存储边(弧);空间效率为O(n2)。对稀疏图而言尤其浪费空间。其次,矩阵结构是静态的,其大小N需要预先估计,然后创建的矩阵。然而,图的规模往往是动态变化的,N的估计过大会造成更多的空间浪费,如果估计过小则经常会出现空间不够用的情况。

领接表法

邻接矩阵的空间效率之所以低,是因为其中大量的单元所对应的边有可能并未在图中出现,这是静态数组结构不可避免的问题。既然如此,则可以将静态的存储结构改为动态的链式存储结构。按照这一思路可以得到图的另一种表示形式,它其实是对邻接矩阵法的一种改进,即邻接表。
每个单链表附设一个头结点(设为2个域),存vi信息;
每个单链表的头结点用顺序存储结构存储。
对每个顶点vi 建立一个单链表,把与vi有关联的边的信息(即度或出度边)链接起来,表中每个结点都设为3个域;

在这里插入图片描述
对于n个顶点e条边的无向图,邻接表中除了n个头结点外,只有2e个表结点,空间效率为O(n+2e)。若是稀疏图(e<<n2),则比邻接矩阵表示法O(n2)省空间。

顶点vi的度恰为顶点vi的邻接表中边表结点的个数;
在这里插入图片描述
对于n个顶点e条边的无向图,邻接表中除了n个头结点外,只有2e个表结点,空间效率为O(n+2e)。若是稀疏图(e<<n2),则比邻接矩阵表示法O(n2)省空间。
顶点vi的度恰为顶点vi的邻接表中边表结点的个数;
在这里插入图片描述
邻接表的优点:空间效率高;容易寻找顶点的邻接点;

邻接表的缺点:判断两顶点间是否有边或弧,需搜索两结点对应的单链表,没有邻接矩阵方便。

邻接表与邻接矩阵联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。

用途:邻接矩阵多用于稠密图的存储(e接近n(n-1)/2);而邻接表多用于稀疏图的存储(e<<n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值