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

本文详细介绍了图的各种类型,如有向图、无向图、完全图和多重图,并探讨了简单图和稠密图的概念。接着,重点讲解了图的四种存储方法:邻接矩阵、邻接表、十字链表和邻接多重表,分析了它们的性质和适用场景。此外,还介绍了图的基本操作,包括广度优先搜索(BFS)和深度优先搜索(DFS)算法及其应用。最后,讨论了图在实际问题中的应用。
摘要由CSDN通过智能技术生成

概述

图的定义这里不多加描述了,下面给出几种图的图像。

 这是有向图,无向图和有向完全图。

简单图: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博客

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调$(生活)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值