数据结构(8)

目录

一、图的基本概念

[二、图的存储结构------非线性结构(m : n)](#二、图的存储结构——非线性结构(m : n))

顺序存储结构

1、邻接矩阵表示法

2、网(即有权图)的邻接矩阵

3、比较


一、图的基本概念

1、若 n 个顶点的无向图有 条边,称为无向完全图。

2、若 n 个顶点的有向图有 n(n-1) 条边,称为有向完全图。

3、稀疏图:边较少的图,边数 <<

4、稠密图:边很多的图。无向图中边数接近 ;有向图中边数接近 n(n-1)。

5、带权树:边上带权的图 <=> 网络 。

6、弧头和弧尾:有向边 (u,v) 称为弧,边的始点 u 叫弧尾,终点 v 叫弧头。在有向图中顶点 v 的度等于该顶点的入度与出度之和。

7、问:当有向图中仅1个顶点的入度为0,其余顶点的入度均为1,此时是何形状?

答:是树,而且是一棵有向树。

8、生成树:是一个极小连通子图,它必含有图中全部顶点,但只有 n-1 条边。

(1)如果在生成树上添加1条边,必定构成一个环。

(2)若图中有 n 个顶点,却少于 n-1 条边,必为非连通图。

9、生成森林:由若干棵有向树组成,含全部顶点,但只有足以构成若干棵不相交的有向树的弧。

路劲长度:

(1)非带权图的路径长度是指此路径上边的条数

(2)带权图的路径长度是指此路径上各边的权之和

简单路径:路径上各顶点 、......、 均不相互重复

二、图的存储结构------非线性结构(m : n)

顺序存储结构

① 可用数组描述元素间的关系(多个顶点,无序可言)

② 图的顺序存储结构是指用数组(顺序表) 来存储图的顶点信息及顶点间的关系(边或弧),其核心是通过数组的下标或元素值描述顶点之间的邻接关系。与树的顺序存储不同,图的顶点之间没有固定的层次或父子关系("无序可言"),因此需要专门的结构记录顶点间的连接状态。

1、邻接矩阵表示法

(1) 建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)

(2) 邻接矩阵(Adjacency Matrix)是图的一种基本顺序存储方式,通过一个二维数组表示顶点间的邻接关系,适用于无向图或有向图(无权图)。

(3) 有关系填1,没关系填0

(4)核心定义

  • 设图有 n 个顶点,定义一个 n×n 的二维数组 A(称为邻接矩阵),其中:
    • Aij=1:表示顶点 i 与顶点 j 之间存在一条边(无向图)或弧(有向图,从 i 到 j)。
    • Aij=0:表示顶点 i 与顶点 j 之间不存在边或弧。
    • 对于无向图,邻接矩阵是对称矩阵(Aij=Aji);对于有向图,邻接矩阵不一定对称。

示例1:

a. 无向图的邻接矩阵是对称的

b. 顶点 i 的度=第 i 行(列)中1的个数

c. 特点:完全图的邻接矩阵中,对角元素为0,其余全为1

示例2:

a. 在有向图的邻接矩阵中,第 i 行含义:以结点 为尾的弧(即出度边)

b. 在有向图的邻接矩阵中,第 i 列含义:以结点 为头的弧(即入度边)

c. 有向图的邻接矩阵可能是不对称的

d. 顶点的出度=第 i 行元素之和,

e. 顶点的入度=第 i 列元素之和,

f. 顶点的度=第 i 行元素之和+第 i 列元素之和,

示例3:

  • 无向图:顶点集合 V={0,1,2,3},边集合 E={(0,1),(0,2),(1,2),(1,3)},邻接矩阵为:

    复制代码
      0 1 2 3
    0 0 1 1 0
    1 1 0 1 1
    2 1 1 0 0
    3 0 1 0 0

    (对称矩阵,如 A01=A10=1,表示 0 和 1 之间有边)。

  • 有向图:顶点集合 V={0,1,2},弧集合 E={<0,1>,<1,0>,<1,2>},邻接矩阵为:

    复制代码
      0 1 2
    0 0 1 0
    1 1 0 1
    2 0 0 0

    (非对称,如 A01=1 但 A10=1 是因为存在双向弧,而 A12=1 但 A21=0)。

(5)特点

  • 优点:
    • 判断两个顶点是否相邻(存在边)的时间复杂度为 O(1)(直接查 Aij)。
    • 便于计算顶点的度(无向图中顶点 i 的度是第 i 行或第 i 列的和;有向图中出度是第 i 行的和,入度是第 i 列的和)。
    • 容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等。
  • 缺点:
    • n 个顶点需要 n*n 个单元存储边(弧)。
    • 空间复杂度为 O(n2),不适合存储稀疏图(边数远小于 n2 的图),会浪费大量空间。
    • 对于 n 个顶点 e 条弧的网,建网时间效率=

2、网(即有权图)的邻接矩阵

网(Network)是带权值的图(边或弧具有权重,如距离、成本等),其邻接矩阵是无权图邻接矩阵的扩展,通过二维数组存储顶点间的权重值。

① A.Edgeij= ()或<>

② A.Edgeij= ∞ 无边(弧)

③ 核心定义

  • 设网有 n 个顶点,定义 n×n 的二维数组 A,其中:
    • Aij=w:表示顶点 i 与顶点 j 之间存在一条边或弧,权重为 w(w 为非负实数)。
    • Aij=∞(无穷大,通常用一个远超最大权重的数表示):表示顶点 i 与顶点 j 之间不存在边或弧。
    • 对于无向网,邻接矩阵仍为对称矩阵(Aij=Aji);对于有向网,矩阵不一定对称。
    • 顶点自身到自身的权重通常为 0(Aii=0)。

示例1:

  • 无向网:顶点集合 V={0,1,2},边及权重为 (0,1,5)、(0,2,3)、(1,2,1),邻接矩阵为:

    复制代码
        0    1    2
    0   0    5    3
    1   5    0    1
    2   3    1    0

    (对称,如 A01=A10=5,表示 0 和 1 之间的边权重为 5)。

  • 有向网:顶点集合 V={0,1,2},弧及权重为 <0,1,2>、<1,2,3>、<2,0,4>,邻接矩阵为:

    复制代码
        0    1    2
    0   0    2   ∞
    1  ∞    0    3
    2   4   ∞    0

    (非对称,如 A01=2 表示从 0 到 1 的弧权重为 2,而 A10=∞ 表示无反向弧)。

示例2:

④ 特点

  • 优点:
    • 不仅能表示顶点间的邻接关系,还能直接存储权重,适合 Dijkstra、Floyd 等最短路径算法的实现(依赖权重快速访问)。
    • 与无权图邻接矩阵一样,判断邻接和计算度(带权和)的效率高(O(1) 或 O(n))。
  • 缺点:
    • 空间复杂度仍为 O(n2),稀疏网(权值非 ∞ 的元素少)会浪费大量空间。

3、比较

类型 核心存储内容 空间复杂度 适用场景
邻接矩阵(无权图) 0/1 表示是否有边 / 弧 O(n2) 稠密图、需频繁判断邻接关系
网的邻接矩阵 权重值 /∞ 表示边的权重 O(n2) 稠密网、需频繁访问权重(如最短路径计算)

两者均通过二维数组实现,本质是用 "空间换时间",适合顶点数量固定且边数较多的图(稠密图 / 网);对于稀疏图 / 网,通常更适合用链式存储(如邻接表)。

相关推荐
福大大架构师每日一题11 分钟前
redis 8.8.0 发布:新数据结构、字段级通知、INCREX、XNACK 全面升级,8.6 到 8.8 变化一文看懂
数据结构·数据库·redis
c2385612 分钟前
list(下)
数据结构·windows·list
CS创新实验室20 分钟前
当数据撞上量子:论《数据结构》课程的颠覆与新生
数据结构·量子计算
代码中介商25 分钟前
排序算法完全指南(八):归并排序深度详解
数据结构·算法·排序算法
kkeeper~10 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
2401_8685347810 小时前
论企业网络设计
数据结构
2401_8769641311 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
c2385615 小时前
vector(下)
数据结构·算法
z落落15 小时前
C# 冒泡排序+选择排序 + Array.Sort 自定义排序
数据结构·算法
无限进步_15 小时前
【C++】weak_ptr、循环引用与线程安全
开发语言·数据结构·c++·算法·安全