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

一、图的定义
1. 图的定义
  • 组成要素: 图G由顶点集V和边集E组成,记作G=(V,E)。其中V是有限的非空顶点集合,E是用顶点对表示的边集合。
  • 表示方法: 数据结构中的数据元素用顶点表示,数据元素之间的关系用边表示。
  • 与树的区别: 树中结点只能与上一层的一个父结点和下一层的多个子结点相连,而图中允许任意两个顶点之间存在关联。
1)有向图
  • 边表示: 从顶点vi到vj的有向边表示为,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个顶点都有边相连的图。边数为。
  • 有向完全图: 具有n个顶点且任意两个不同顶点之间存在方向相反的两条弧的图。弧数为n(n−1)。
  • 推导过程: 无向完全图边数计算为1+2+...+(n-1)=;有向完全图在此基础上每条边变为双向,故乘以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) | ⭐⭐⭐ |

相关推荐
dongf201916 小时前
R语言KNN算法
算法·数据分析·r语言
小O的算法实验室17 小时前
2025年IEEE TASE,基于双层耦合平均场博弈的大规模智能体集成任务分配与轨迹规划
人工智能·算法·机器学习
8Qi817 小时前
LeetCode 337:打家劫舍 III(House Robber III)—— 题解 ✅
算法·leetcode·二叉树·动态规划
地平线开发者17 小时前
从 INT64 Div 算子约束到 Cast 修复全流程
算法
AI科技星17 小时前
基于奇合数边界的离散解析数论与双螺旋宇宙本体大统一体系论文全部数学公式汇总表
人工智能·算法·机器学习·架构·学习方法
糖果店的幽灵17 小时前
Pandas DataFrame 数据结构详解
数据结构·pandas
地平线开发者17 小时前
Horizon 模型多 Batch 配置
算法·自动驾驶
czhaii17 小时前
GB2312简体中文编码表
单片机·算法
8Qi817 小时前
LeetCode 121 & 122:股票买卖问题(DP 对比题解)✅
算法·leetcode·职场和发展·动态规划
一只齐刘海的猫18 小时前
【Leetcode】 接雨水
java·算法·leetcode