数据结构|数据结构学习笔记(第六章 图)

数据结构|数据结构学习笔记(第六章 图)
文章图片

概述 【数据结构|数据结构学习笔记(第六章 图)】图的定义这里不多加描述了,下面给出几种图的图像。
数据结构|数据结构学习笔记(第六章 图)
文章图片

这是有向图,无向图和有向完全图。
简单图:1.不存在重复边2.不存在顶点到自身的边
多重图: 某两个顶点间的边数大于一条,又允许顶点通过一条边与自身关联。
完全图:任意两个顶点间都有边
关于其他基本概念可看下面这个博主写的超级详细
数据结构:图(Graph)【详解】_UniqueUnit的博客-CSDN博客_数据结构图
图的存储及基本操作 邻接矩阵法 用一个一维数组存储顶点的信息,用一个二维数组存储边的关系(即顶点间的邻接关系),这个二维数组成为邻接矩阵。
数据结构|数据结构学习笔记(第六章 图)
文章图片

#define MaxVertexNum 100//顶点数目 typedef char VertexType; //顶点数据类型 typedef int EdgeType; //边上权值数据类型 typedef struct{ VertexType Vex[MaxVertexNum]; //顶点表 EdgeType Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧数 }MGraph;

数据结构|数据结构学习笔记(第六章 图)
文章图片

注:无向图的邻接矩阵是对称矩阵,邻接矩阵空间复杂度为o(n2),n为顶点数
性质
1.无向图邻接矩阵为对称矩阵。
2.无向图第i行(或i列),非0(或非无穷)元素的个数正好为顶点i的度。
对于有向图,第i行非0元素个数为顶点i出度,第i列非0个数为入度。
3.稠密图 适合使用邻接矩阵的存储表示。
邻接表法 图的邻接表法结合了顺序存储和链式存储。给每个顶点建立个单链表,称为边表,边表的头指针和顶点数据信息采用顺序结构,称为顶点表。
数据结构|数据结构学习笔记(第六章 图)
文章图片

下面是无向图和有向图的示例图:数据结构|数据结构学习笔记(第六章 图)
文章图片

数据结构|数据结构学习笔记(第六章 图)
文章图片


性质:
1.对于稀疏图,采用邻接表将极大节省存储空间。
2.图的邻接表表示不唯一。
3.在邻接表中,给出一顶点,找出他的邻边很容易。
4.无向图空间复杂度是o(v+2e),有向图为o(v+e),v为顶点集,e为边集
十字链表 是有向图的一种链式结构,每个弧和顶点都分别对应一个结点。
数据结构|数据结构学习笔记(第六章 图)
文章图片

从左往右:前两个指弧尾弧头,三四个指弧头弧尾相同的下一条弧,第五个指向该弧的相关信息。data为顶点相关信息,后面两个指向以该顶点为弧头弧尾的第一个弧结点。数据结构|数据结构学习笔记(第六章 图)
文章图片

不唯一,很容易求出度和入度。一个十字链表确定一个图。
邻接多重表 无向图的另一种链式存储,每条边用一个结点表示。
数据结构|数据结构学习笔记(第六章 图)
文章图片

下图为示例:数据结构|数据结构学习笔记(第六章 图)
文章图片

图的基本操作 数据结构|数据结构学习笔记(第六章 图)
文章图片

图的遍历 广度优先搜索(BFS) 类似于二叉树的层次遍历算法
无论是用邻接矩阵还是邻接表,我们都需要一个辅助队列,用邻接表时时间复杂度为o(v+e),用邻接矩阵时,时间复杂度为o(v2)。
广度优先搜索算法_幽蓝丶流月的博客-CSDN博客_广度优先搜索
广度优先搜索算法(附C++实现)_cclplus的博客-CSDN博客_c++广度优先搜索
广度优先生成树
数据结构|数据结构学习笔记(第六章 图)
文章图片

深度优先搜索(DFS) 类似于树的先序遍历
数据结构_深度优先搜索(C语言)_小-黯的博客-CSDN博客_深度优先搜索c语言实现
深度优先遍历c_月老小号的博客-CSDN博客_深度优先遍历c
是一个递归算法,需要借助一个递归工作栈,时间复杂度与广度优先一致。
深度优先的生成树和生成森林
数据结构|数据结构学习笔记(第六章 图)
文章图片

图的应用 这个博主写的不错
图的应用详解-数据结构_iteye_4515的博客-CSDN博客

    推荐阅读