元素之间存在多对多关系
注意:线性表的元素之间存在前驱和后继,树的元素之间存在父子关系,图的任意元素之间都有可能存在关系

由顶点的有穷非空集合和顶点之间边的集合组成

在图型数据结构中,数据被成为顶点,数据之间的关系被成为边
注意:在图中不允许出现没有点,但可以没有边

G(V,E):V表示顶点的集合,E表示边的集合

各种图的定义

无向图
顶点与顶点之间没有方向,这种边称为无向边,边用无向序偶对(v,v1)表示
(v,v1):表示任意两个点之间的关系
例: V = {A,B,C,D} E = {(A,B),(B,C),(C,D),(D,A),(A,C)}
无向完全图:在无向图中,任选两个顶点之间都存在边
无向完全图边数:n*(n-1)/2

有向图
若顶点之间有方向,这种边称为有向边,也叫弧,用有序偶对<v,v1>表示
v1叫弧头,v叫做弧尾,图中由v指向v1,箭头指向为头
例:<A,B> != <B,A>
有向完全图:在有向图中,任意两个顶点之间都存在方向相反的两条弧
简单图:不存在顶点到自身的边,也不存在重复出现的边
注意:数据结构课程中讨论的都是简单图
稀疏图:图中(相对)有很少边或弧的图
稠密图:图中(相对)有很多边或弧的图
:图中的边或弧的相关的数据
网(带权图):图中的边或弧有相关的数据
如果G(V,E)和G1(V1,E1),存在V>=V1(V包含V1),且E>=E1(E包含E1),那么G1是G的子图

顶点与边的关系

顶点的度:指的是顶点相关联的边或弧的条目数
有向图又分为入度和出度
入度:其它顶点到该顶点的弧的条目数
出度:从该点出发到其它顶点的弧的条目数
顶点序列:从一个顶点到另一个顶点的的路径
路径长度:路径上的边或弧的条目数

连通图的相关术语

连通:在无向图中,在顶点V到V1之间有路径,则称V到V1之间是"连通"的
连通图:任意两个顶点都是连通的
完全连通图:任意两点都有边,且任意两个顶点都是连通的
连通分量:无向图中的极大连通连通子图
要求
1、必须是子图
2、子图次序是连通的
3、连通子图含有极大的顶点数
强连通图:在有向图中,任意顶点之间都存在路径
强连通分量:有向图中的极大连通连通子图(同样满足上述要求)
在有向图中如果有一个顶的入度为0,其它顶点的入度均为1,则是一颗有向树

图的存储结构

图的存储主要是两个方面:顶点,边
邻接矩阵
由一个一维数组(顶点)和一个二维数组(边或弧)组成
二维数组i,i位置都是0,如果是无向图则数组对称(左上到右下的对角线为轴)
:存储空间与顶点有关,与边数无关
优点
1、非常容易判定两点之间手否有边
2、非常容易计算任意项的入度和出度
3、非常容易统计邻接点、
缺点
如果存储稀疏图,会非常浪费存储空间

邻接表
由顶点表、边表组成(无向图在存储时要像有向图一样把方向拆开存)
优点
1、节省存储空间
2、非常容易计算出度
:顶点在链表中出现的次数表示的是其入度
缺点
不方便计算入度(于是有了十字链表)

十字链表
由于邻接表不能同时兼顾出度和入度,因此我们修改邻接表的编表结构,使其既存储入度也存储出度,这种表就叫十字链表

邻接多重表
由于遍历表时需要一些删边操作,而邻接表在删除边时非常麻烦,因此就设计出了邻接多重表

边集数组
由两个一维数组构成,一个存储顶点信息,另一个存储边的信息(它的每个数据元素都由一条边的起点到终点的下标和权组成),这种存储结构更侧重于边的相关操作(路径、路径长度、最短路径),而统计顶点的度需要扫描整个数组,效率不高

图的遍历

注意:图的遍历结果无论是深度优先还是广度优先都不是唯一的;不能重复访问:要定义标志位
深度优先
类似树的前序遍历
广度优先
类似树的层序遍历,与树一样也需要队列的配合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值