数据结构笔记--图

数据结构笔记--图

    • 本章总结
    • 图的概念
      • 基本术语
      • 抽象数据类型
    • 图的存储结构
      • 邻接矩阵表示法(数组)
        • 无向图
        • 有向图
        • 有权图
        • 邻接矩阵的优缺点
        • 代码实现
      • 邻接表表示法(链式)
        • 结构
        • 无向图
        • 有向图
        • 邻接表的优缺点
        • 邻接矩阵与邻接表的对比
        • 代码实现
      • 十字链表表示法(尚未自学)
      • 邻接多重表
        • 概念
        • 适宜应用(与邻接表对比)
    • 图的遍历
      • 基本概念
      • 深度优先搜索
        • 算法思路
        • 邻接矩阵实现
        • 邻接表实现
        • 两种方法效率分析
      • 广度优先搜索
        • 算法思路
        • 邻接表实现
        • 两种方法效率分析
    • 图的其他运算
      • 1、求图的生成树(或生成森林)
        • 概念介绍
        • 举例(生成树)
        • 举例(生成森林)
      • 2、求最小生成树
        • 概念介绍
        • 算法
          • Kruskal (克鲁斯卡尔)算法
          • Prim (普里姆)算法
      • 3、求最短路径
        • 概念介绍(与最小生成树区分)
        • 两种常见的最短路径问题:
          • 单源最短路径-Dijkstra (迪杰斯特拉)算法
          • 所有顶点间的最短路径一Floyd (弗洛伊德)算法
      • 4、求关节点和重连通分量(略)
      • 5、拓扑排序
      • 6、求关键路径

本章总结

考试不考十字链表和临界多重表,考试紫色的做要求,除了Dijkstra算法

数据结构笔记--图_第1张图片

图的概念

基本术语

数据结构笔记--图_第2张图片
数据结构笔记--图_第3张图片
数据结构笔记--图_第4张图片数据结构笔记--图_第5张图片数据结构笔记--图_第6张图片数据结构笔记--图_第7张图片

抽象数据类型

数据结构笔记--图_第8张图片
大学表示集合,小写表示集合的元素

图的存储结构

数据结构笔记--图_第9张图片

邻接矩阵表示法(数组)

无向图

数据结构笔记--图_第10张图片

有向图

数据结构笔记--图_第11张图片

有权图

数据结构笔记--图_第12张图片

邻接矩阵的优缺点

数据结构笔记--图_第13张图片

代码实现

数据结构笔记--图_第14张图片数据结构笔记--图_第15张图片

邻接表表示法(链式)

结构

数据结构笔记--图_第16张图片

无向图

数据结构笔记--图_第17张图片

有向图

数据结构笔记--图_第18张图片
逆邻接表可以使求度更容易
数据结构笔记--图_第19张图片

邻接表的优缺点

邻接矩阵与邻接表的对比

数据结构笔记--图_第20张图片

代码实现

数据结构笔记--图_第21张图片

十字链表表示法(尚未自学)

用一个链表来表示邻接表与逆邻接表
数据结构笔记--图_第22张图片数据结构笔记--图_第23张图片数据结构笔记--图_第24张图片

邻接多重表

数据结构笔记--图_第25张图片

概念

邻接多重表(adjacent multiList)是无向图(网)的另一种链式存储结构。
在此存储结构中,
图的顶点信息存放在顶点数组中,数组元素有两个域:
data域:存放与顶点相关的信息;
firstedge域:指向一个单链表,此单链表存储所有依附于该顶点的边的信息。

这些单链表的一个表结点对应一条边,表结点有六个域:
mark:为标志域,用来标记该边是否被访问过;
ivexjvex:分别存放该边两个顶点在图中的位置;
ilink:指向下一条依附于顶点ivex的边对应的表结点;
jlink:指向下一条依附于顶点jvex的边对应的表结点。
info:该域存放该边相关的信息,实际上就是弧的权值,对于无向图,info域可省略;

适宜应用(与邻接表对比)

决邻接表存储无向图时同一条边要存储两次的问题。
邻接多重表主要用于存储无向图。因为如果用邻接表存储无向图,每条边的两个边结点分别在以该边所依附的两个顶点为头结点的链表中,这给图的某些操作带来不便。例如,对已访问过的边做标记,或者要删除图中某一条边等,都需要找到表示同一条边的两个结点。因此,在进行这一类操作的无向图的问题中,采用邻接多重表作存储结构更为适宜。

图的遍历

基本概念

数据结构笔记--图_第26张图片

深度优先搜索

算法思路

数据结构笔记--图_第27张图片

邻接矩阵实现

数据结构笔记--图_第28张图片

数据结构笔记--图_第29张图片

邻接表实现

数据结构笔记--图_第30张图片数据结构笔记--图_第31张图片

两种方法效率分析

数据结构笔记--图_第32张图片

广度优先搜索

算法思路

数据结构笔记--图_第33张图片

邻接表实现

数据结构笔记--图_第34张图片
数据结构笔记--图_第35张图片
数据结构笔记--图_第36张图片

两种方法效率分析

数据结构笔记--图_第37张图片

图的其他运算

1、求图的生成树(或生成森林)

概念介绍

数据结构笔记--图_第38张图片

举例(生成树)

数据结构笔记--图_第39张图片

举例(生成森林)

数据结构笔记--图_第40张图片
数据结构笔记--图_第41张图片

2、求最小生成树

概念介绍

数据结构笔记--图_第42张图片
数据结构笔记--图_第43张图片

算法

数据结构笔记--图_第44张图片

Kruskal (克鲁斯卡尔)算法

1、不停的选最小的边进去,1->2->3->4->5,注意选边为5是不要构成环路
2、边是e条,但有个判断回路的过程,所以不是O(e)
数据结构笔记--图_第45张图片

Prim (普里姆)算法

先任选一个顶点,找最小的边,
这种算法无需判断回路
n为定点数
数据结构笔记--图_第46张图片

3、求最短路径

概念介绍(与最小生成树区分)

数据结构笔记--图_第47张图片

两种常见的最短路径问题:

单源最短路径-Dijkstra (迪杰斯特拉)算法

数据结构笔记--图_第48张图片

所有顶点间的最短路径一Floyd (弗洛伊德)算法

可以通过调用n次Dijkstra算法来完成,
时间复杂度为0(n3)
还有更简单的一一个算法: Floyd算法(略)

4、求关节点和重连通分量(略)

5、拓扑排序

6、求关键路径

你可能感兴趣的:(2020数据结构学习)