计算机中级-数据库系统工程师-数据结构-图

一、图的定义
1. 图的定义
  • 组成要素: 图G由顶点集V和边集E组成,记作G=(V,E)。其中V是有限的非空顶点集合,E是用顶点对表示的边集合。
  • 表示方法: 数据结构中的数据元素用顶点表示,数据元素之间的关系用边表示。
  • 与树的区别: 树中结点只能与上一层的一个父结点和下一层的多个子结点相连,而图中允许任意两个顶点之间存在关联。
1)有向图
  • 边表示: 从顶点vi到vj​的有向边表示为\langle v_i,v_j \rangle,vi称为弧尾,vj称为弧头。
  • 特点:⟨vi,vj⟩和⟨vj,vi⟩表示不同的边。例如顶点1到4的边和4到1的边是两条不同的边。
  • 示例: 图中顶点集V={1,2,3,4},边集E={⟨1,2⟩,⟨1,3⟩,⟨1,4⟩,⟨4,1⟩,⟨4,2⟩}。
2)无向图
  • 边表示: 顶点vi和vj之间的无向边表示为(vi,vj)。
  • 特点:(vi​,vj​)和(vj​,vi​)表示同一条边。
  • 示例: 图中顶点集V={1,2,3,4,5},边集E={(1,2),(1,3),(1,4),(2,3),(3,4),(3,5),(4,5)}。
二、图的相关概念
1. 完全图
  • 无向完全图: 具有n个顶点且每个顶点与其他n−1个顶点都有边相连的图。边数为\frac{n(n-1)}{2}​。
  • 有向完全图: 具有n个顶点且任意两个不同顶点之间存在方向相反的两条弧的图。弧数为n(n−1)。
  • 推导过程: 无向完全图边数计算为1+2+...+(n-1)=\frac{n(n-1)}{2}​;有向完全图在此基础上每条边变为双向,故乘以2。
2. 度
  • 定义: 与顶点相连的边的数量称为该顶点的度。
  • 示例: 有向图a中顶点1的度为4(相连边数),无向图b中顶点1的度为3。
3. 出度和入度
  • 定义: 仅适用于有向图,出度指从顶点出发的边数,入度指指向顶点的边数。
  • 示例: 有向图a中顶点1的出度为3(流向2、3、4),入度为1(来自4);顶点4的出度为2,入度为1。
4. 路径
  • 定义: 顶点序列中相邻顶点间存在边则构成路径,路径长度为经过的边数。
  • 无向图路径: 如1-4-5路径长度为2,1-2-3-5路径长度为3。
  • 有向图路径: 必须遵循边方向,如1→4→2是有效路径,但2→4不存在路径。
5. 子图
  • 定义: 若图G′的顶点集V′是G的顶点集V的子集,且边集E′是E的子集,则G′是G的子图。
  • 示例: 从无向图b中选取顶点{1,2,4}及其相连边{(1,2),(1,4)}可构成子图。
6. 连通图
  • 无向连通图: 任意两个顶点间都存在路径的无向图。如图b是连通图。
  • 强连通图: 有向图中任意两个顶点间双向都有路径。如图a不是强连通图(如顶点3无法到达其他顶点)。
7. 网
  • 定义: 边带权值的图称为网,权值可表示距离、成本等实际意义。
  • 应用: 如城市交通网中,顶点表示城市,边表示公路,权值表示里程或运输成本。
三、图的存储结构
1. 邻接矩阵表示法
1)邻接矩阵表示法定义
  • 表示原理:用n×n矩阵表示n个顶点的图,矩阵元素a_{ij}表示顶点vi到vj的边存在性
  • 元素取值:有边时a_{ij}=1,无边时a_{ij}=0,自环边(顶点到自身)恒为0
  • 存储内容:同时存储顶点集合和边集合,矩阵行/列对应顶点,元素值对应边
  • 有向图特点:矩阵不对称,a_{ij}​与a_{ji}可能不同(如示例中a_{12}=1而a_{21}=0)
2)无向图的邻接矩阵表示法
  • 对称性:矩阵关于主对角线对称,a_{ij}=a_{ji}(如示例中a_{12}=a_{21}=1)
  • 对角线特征:主对角线元素均为0,表示无自环边
  • 空间效率:实际只需存储上三角或下三角矩阵即可完整表示图结构
3)网带有权值的图的邻接矩阵的表示
  • 权值表示:用矩阵元素直接存储边的权值(如a_{12}=5表示v1→v2​权值为5)
  • 无穷大约定:无边时用∞表示(区别于普通图的0),自环边仍为0
  • 示例解析:图中a_{23}=4表示v2→v3权值为4,a_{32}=∞表示v3→v2无连接
2. 邻接链表表示法
1)邻接链表表示法定义
  • 组成要素:
    • 表头节点:包含顶点数据域(data)和指向第一条边的指针域(firstarc)
    • 表节点:包含邻接顶点编号(adjvex)、边信息(info)和下一条边指针(nextarc)
  • 存储方式:为每个顶点建立单链表,链表节点表示与该顶点直接相连的边/弧
2)无向图的邻接链表表示法
  • 链表构建:每个顶点的链表包含所有相邻顶点(如顶点1的链表包含2→3→4)
  • 对称关系:若顶点A的链表包含B,则B的链表必包含A(体现无向图特性)
  • 空间优势:相比邻接矩阵更节省空间,尤其适合稀疏图(边数远少于n^2的图)
3)有向图的邻接链表表示法
  • 方向性体现:链表仅存储以该顶点为起点的弧(如v0链表含1,2表示v0→v1​和v0→v2​)
  • 逆邻接表:额外建立的表存储以该顶点为终点的弧(如v0在逆邻接表中含3表示v3→v0​)
  • 空链表情况:若顶点无出边(如示例v1​),其链表为空
4)带权值的网的邻接链表表示法
  • 节点扩展:表节点增加权值存储域(如v0→v1​节点存储权值8)
  • 表示方法:在adjvex后增加权值信息,形成三元组(邻接顶点,权值,下指针)
  • 示例解析:v2v_2v2​链表中的"3,2"表示v2→v3权值为2,v3链表中的"0,5"表示v3→v0权值为5
四、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

图的定义

由顶点集合V和边集合E组成,分为有向图(边带方向)和无向图(边无方向)

树与图的区别:树是分层结构,同一层/跨层节点无连接;图允许任意节点互联

⭐⭐

图的分类

- 无向图:边无方向(圆括号表示边)

- 有向图:边有方向(尖括号表示弧)

- 网:边带权值(如距离/成本)

完全图:无向完全图边数=𝑛(𝑛−1)/2;有向完全图弧数=𝑛(𝑛−1)

⭐⭐⭐

图的相关概念

- 度:顶点连接的边数

- 出度/入度(有向图):流出/流入的边数

- 连通性:无向图任意两点有路径=连通图;有向图=强连通图

路径长度:路径经过的边数(易混淆:有向图需方向一致)

⭐⭐

图的存储结构

- 邻接矩阵:𝑛×𝑛矩阵,元素值表示边存在/权值(无向图矩阵对称)

- 邻接链表:为每个顶点建单链表,存储相邻顶点及权值(网需额外权值域)

邻接矩阵 vs 邻接链表:稠密图用矩阵省空间;稀疏图用链表省时间

⭐⭐⭐⭐

应用示例

城市交通网用网表示(顶点=城市,边=公路,权值=里程/成本)

关键算法关联:最短路径(Dijkstra)、最小生成树(Prim/Kruskal)

⭐⭐⭐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kethy__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值