数据结构(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(称为邻接矩阵),其中:
    • A[i][j]=1:表示顶点 i 与顶点 j 之间存在一条边(无向图)或弧(有向图,从 i 到 j)。
    • A[i][j]=0:表示顶点 i 与顶点 j 之间不存在边或弧。
    • 对于无向图,邻接矩阵是对称矩阵(A[i][j]=A[j][i]);对于有向图,邻接矩阵不一定对称。

示例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

    (对称矩阵,如 A[0][1]=A[1][0]=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

    (非对称,如 A[0][1]=1 但 A[1][0]=1 是因为存在双向弧,而 A[1][2]=1 但 A[2][1]=0)。

(5)特点

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

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

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

① A.Edge[i][j]= ()或<>

② A.Edge[i][j]= ∞ 无边(弧)

③ 核心定义

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

    (对称,如 A[0][1]=A[1][0]=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

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

示例2:

④ 特点

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

3、比较

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

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

相关推荐
Samuel-Gyx4 小时前
数据结构--顺序表与链表
数据结构·算法·链表·1024程序员节
小年糕是糕手4 小时前
【数据结构】队列“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法
无限进步_4 小时前
【C语言】函数指针数组:从条件分支到转移表的优雅进化
c语言·开发语言·数据结构·后端·算法·visual studio
杨福瑞6 小时前
数据结构:顺序表讲解(2)
c语言·开发语言·数据结构
侯小啾11 小时前
【03】C语言 强制类型转换 与 进制转换
c语言·数据结构·算法
一二学长16 小时前
快速排序(JAVA详细讲解快速排序的四种方式)
数据结构
大数据张老师17 小时前
数据结构——红黑树
数据结构·算法·红黑树
文火冰糖的硅基工坊17 小时前
[人工智能-大模型-54]:模型层技术 - 数据结构+算法 = 程序
数据结构·人工智能·算法
Yupureki18 小时前
从零开始的C++学习生活 13:红黑树全面解析
c语言·数据结构·c++·学习·visual studio