数据结构:图的基本概念

这篇具有很好参考价值的文章主要介绍了数据结构:图的基本概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是图?

图是一种非线性的数据结构,表示多对多的关系。

图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V, E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

在图中需要注意的是:

  • 线性表和树可以看做特殊的图。
  • 线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们则称之为顶点(Vertex)
  • 线性表可以没有元素,称为空表;树中可以没有节点,称为空树;但是,在图中不允许没有顶点(有穷非空性)
  • 线性表中的各元素是线性关系,树中的各元素是层次关系,而图中各顶点的关系是用边来表示(边集可以为空)。

二、图的分类

1. 无向图

顾名思义,无向图就是图上的边没有方向。数据结构:图的基本概念上图就是一个无向图。该图的顶点集为 V = { 1 , 2 , 3 , 4 , 5 , 6 } ,边集 E = { ( 1 , 2 ) , ( 1 , 5 ) , ( 2 , 3 ) , ( 2 , 5 ) , ( 3 , 4 ) , ( 4 , 5 ) , ( 4 , 6 ) }。在无向图中,边 ( u , v )和边 ( v , u )是一样的,也就是说和方向无关。

1.1 无向完全图

在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。有n个顶点的无向完全图有n(n-1)/2 条边。
数据结构:图的基本概念

1.2 连通图(无向图)

在无向图G中,如果从顶点u到顶点v有路径,则称u和v是连通的。
如果对于图中任意两个顶点u、v,都有(u, v)∈E(即u和v都是连通的),则称G是连通图
无向图中的极大连通子图称为连通分量
连通分量需要满足:

  • 必须是子图;
  • 必须是连通的;
  • 含有极大顶点数;
  • 包含依附于这些顶点的所有边。

数据结构:图的基本概念数据结构:图的基本概念
上图中,图1是无向非连通图(因为A与E不连通,即不满足图上任意两个顶点连通),但是有两个连通分量,即图2和图3。而图4,尽管是图1的子图,但是它却不满足连通子图的极大顶点数(图2满足)。 因此它不是图1的无向图的连通分量。

这里,补充一个概念。
关节点(割点):某些特定的顶点对于保持图或连通分支的连通性有特殊的重要意义。如果移除某个顶点将使图或者分支失去连通性,则称该顶点为关节点。如下图中的 顶点c 。
数据结构:图的基本概念

1.3 无向图的度

对于无向图G= (V, E), 如果边(v,v’)属于E, 则称顶点v和v‘互为邻接点,即(v,v’)与顶点v和v’相关联。顶点v的度是和v相关联的边的数目。如下面这个无向图,顶点A 的度为3。各个顶点度的和=3+2+3+2=10。而此图的边数是5,推敲后发现,边数其实就是各顶点度数和的一半,多出的一半是因为重复两次计数。
数据结构:图的基本概念

2. 有向图

顾名思义,有向图就是图上的边有方向。
数据结构:图的基本概念上图就是一个有向图。该图的顶点集为 V = { A , B , C , D } ,边集 E = { < B , A > , < B , C > , < C , A > , < A , D > }。在有向图中,边 < u , v >和边 < v , u >是不一样的。

通常情况下,有向图中的边用< >表示,无向图中的边用( )表示。

2.1 有向完全图

在有向图中,如果任意两个顶点之间都存在方向互为相反的两条边,则称该图为有向完全图。n个顶点的有向完全图含有n*(n-1)条边。
数据结构:图的基本概念

2.2 强连通图(有向图)

在有向图G中,如果对于每一对顶点vi、vj且vi≠vj,从vi到vj和从vj到vi都存在路径,则称G是强连通图
有向图中的极大强连通子图称做有向图的强连通分量
强连通图具有如下定理:一个有向图G是强连通的,当且仅当G中有一个回路,它至少包含每个节点一次。
数据结构:图的基本概念如上图所示,图1不是强连通图,图2是强连通图。图2也可以看做是图1的强连通分量。

2.3 有向图的度

对于有向图G = (V, E),如果边<v,v’>属于E,则称顶点v邻接到顶点v’,顶点v’邻接自顶点v的边<v,v’>和顶点v, v’相关联。
从顶点v出发的边的数目称为v的出度;到达顶点v的边的数目称为v的入度,顶点v的度=出度+入度。以下面这个有向图为例,
顶点A的入度是2 (从B到A的边,从C到A的边),出度是1(从A到D的边),所以顶点A的度为2+1=3。此有向图的边有4 条,而各顶点的出度和为1+2+1+0=4,各顶点的入度和=2+0+1+1=4。
数据结构:图的基本概念

2. 稀疏图和稠密图

按照边的多少来分稀疏图和稠密图。假设一个图的顶点数为n,如果边数大于n*log n,则该图为稠密图,反之则为稀疏图。

3. 有环图和无环图

先了解一些概念:

  • 路径(path): 依次遍历顶点序列之间的边所形成的轨迹。注意,依次就意味着有序,先1后2和先2后1不一样。
  • 简单路径: 没有重复顶点的路径称为简单路径。说白了,这一条路径中没有出现绕了一圈回到同一顶点的情况。
  • 环: 包含相同的顶点两次或者两次以上。例如,下图中路径 < 1 , 2 , 4 , 3 , 1 >,其中1出现了两次,那么这条路径就是一个环路。
    数据结构:图的基本概念

因此,顾名思义,有环图就是图上有环,无环图就是没有环的图。
特别地,有向无环图有,又叫做DAG(Directed Acyline Graph),具有一些很好的性质,很多动态规划的问题都可以转化成DAG中的最长路径、最短路径或者路径计数的问题。

4. 加权图和无权图

首先需要了解一下什么是权。有些图的边上具有与它相关的数字,这种与图的边相关的数叫做权(Weight)。这些权可以表示从一个顶点到另一个顶点的距离或耗费。因此加权图就是边上带有权重的图,与其对应的是无权图,或叫等权图,即边上没有权重信息。如果一张图不含权重信息,我们就认为边与边之间没有差别。

通常情况下,加权图会被称为网络。

三、图的存储结构

1. 邻接矩阵

图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点的信息,一个二维数组(称为邻接矩阵)存储图中边的信息。
(1)下图是使用邻接矩阵存储无向图。如图所示,设置两个数组,顶点数组为vertex[4] = {v0, v1, v2, v3},边数组arc[4][4]实际上是一个矩阵。对于矩阵的主对角线的值,即arc[0][0]、arc[1][1]、arc[2][2]、arc[3][3]全为0,这是因为顶点上不存在自环的边。通过这个例子可以看出,无向图的邻接矩阵是一个对称矩阵。
数据结构:图的基本概念(2)下图是使用邻接矩阵存储有向图。如图所示,设置两个数组,顶点数组为vertex[4] = {v0, v1, v2, v3},边数组arc[4][4]实际上是一个矩阵。对于矩阵的主对角线的值,即arc[0][0]、arc[1][1]、arc[2][2]、arc[3][3]全为0,这是因为顶点上不存在自环的边。通过这个例子可以看出,有向图的邻接矩阵并不是一个对称矩阵。
数据结构:图的基本概念

2. 邻接表

邻接表由表头节点和表节点两部分组成,图中每个顶点均对应一个存储在数组中的表头节点。如果这个表头节点所对应的顶点存在邻接节点,则把邻接节点依次存放于表头节点所指向的单向链表中。
(1)下图所示的就是一个无向图的邻接表结构。从该图可以看出,顶点表的各个结点由data和firstedge两个域表示,data是数据域,存储顶点的信息,firstedge是指针域,指向边表的第一个结点,即此顶点的第一个邻接点。边表结点由adjvex和next两个域组成。adjvex是邻接点域,存储某顶点的邻接点在顶点表中的下标,next则存储指向边表中下一个结点的指针。例如:v1顶点与v0、v2互为邻接点,则在v1的边表中,adjvex分别为v0的0和v2的2。
数据结构:图的基本概念

(2)下图是使用邻接表存储有向图。值得注意的是,由于有方向的,因此有向图的邻接表分为出边表和入边表(又称逆邻接表),出边表的表节点存放的是从表头节点出发的有向边所指的尾节点;入边表的表节点存放的则是指向表头节点的某个顶点。
数据结构:图的基本概念
显而易见,如果图是一个稀疏图,用邻接表进行存储比较合适,如果图是一个稠密图,则用邻接矩阵更合适。

参考链接

https://www.cnblogs.com/xiaobingqianrui/p/8902111.html
https://www.cnblogs.com/ssyfj/p/9474032.html
https://blog.csdn.net/yjw123456/article/details/90211563文章来源地址https://www.toymoban.com/news/detail-411678.html

到了这里,关于数据结构:图的基本概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构之数据结构要学什么,基本概念,三要素

          我从大二上学期的时候学了数据结构,但是当时对数据结构的重要性并不太重视,直到在升大三的暑假,才意识到数据结构对以后学语言和找工作方面的重要性,所以亡羊补牢,为时未晚,尝试着结合b站上王道考研数据结构课,来记录自己对知识和代码的理解。    

    2024年02月15日
    浏览(43)
  • C++11 数据结构0 什么是 “数据结构“?数据,数据对象,数据元素,数据项 概念。算法的基本概念 和 算法的度量,大O表示法,空间换时间的代码

    是能输入计算机且能被计算机处理的各种符号的集合。 数值型的数据:整数和实数。 非数值型的数据:文字、图像、图形、声音等。         性质相同的 \\\"数据元素\\\" 的集合         例如一个 int arr[10],  Teacher tea[3]; 数据元素:          tea[0],tea[1],arr[2],这些都是 数据项:

    2024年04月15日
    浏览(51)
  • 数据结构——图的基本定义以及图的存储结构,邻接矩阵,邻接表

    目录 图的定义和术语 图的存储结构 顺序存储结构—邻接矩阵 链式存储结构 邻接表 邻接多重表 十字链表 图的遍历 图的连通性问题 有向无环图及其应用 最短路径 图的定义:图是一种非线性的复杂的数据结构,图中的数据元素的关系是多对多的关系 ,在图中我们常常把数

    2024年02月04日
    浏览(57)
  • 数据结构--图的基本操作

    使用的存储模式: 图的基本操作: • Adjacent(G,x,y):判断图G是否存在边x, y或(x, y)。 • Neighbors(G,x):列出图G中与结点x邻接的边。 • InsertVertex(G,x):在图G中插入顶点x。 • DeleteVertex(G,x):从图G中删除顶点x。 • AddEdge(G,x,y):若无向边(x, y)或有向边x, y不存在,则向图G中添加该

    2024年02月16日
    浏览(52)
  • 【数据结构】图的基本操作

    一、问题描述 分别以邻接矩阵和邻接表作为存储结构,实现以下图的基本操作: 增加一个新结点v,Insert(G,v); 删除顶点v及其相关的边,Delete(G,v); 增加一条边v,w,Insert(G,v,w); 删除一条边v,w,Delete(G,v,w); 二、设计思路 1、邻接矩阵实现:         邻接矩阵实现图的基本

    2024年02月06日
    浏览(49)
  • 数据结构入门(C语言版)图的概念和功能函数实现

    图是一种比线性表和树更复杂的数据结构。在线性表中,数据元素之间仅有 线性关系每个元素 只有 一个直接前驱 和 一个直接后继 。在树形结构中,数据元素之间存在明显的层次关系,并且每层的元素可能和下一层的多个元素(即其孩子结点)相邻,但只能和上一层的个元素(即其

    2024年02月06日
    浏览(51)
  • 【数据结构】一、数据结构的基本概念

    数据是 信息的载体 ,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序 识别 和 处理 的符号的集合。 数据是计算机程序加工的原料。 数据元素 是数据的基本单位。通常作为一个整体进行考虑和处理,用一个 数据元素 描述一个个体。一个数据元素可

    2024年03月10日
    浏览(89)
  • 【数据结构与算法】一、数据结构的基本概念

    抽象数据类型(ADT)定义举例:Circle的定义 如何处理杂乱无章且多样化的数据: 数据元素 :数据中的个体被称为数据元素。 数据对象 :性质相同的数据元素组成的集合。 数据结构 :数据元素加上数据元素之间的关系,就形成了数据结构。 逻辑结构 :数据结构的逻辑模型。

    2023年04月17日
    浏览(99)
  • 数据结构基本概念

    一、数据 数据对象-数据元素-数据项(属性),前者由后者组成 二、数据结构 定义:按某种关系的数据元素的集合 三、数据类型 1、原子类型(例如整型) 2、结构类型(由原子类型组成,例如数组) 3、抽象数据类型(例如Java里面的类)

    2024年02月09日
    浏览(45)
  • 数据结构--队列的基本概念

    队列其实是一种受限制的线性表 队列(Queue):是 只允许在一端进行插入或删除操作 color{red}只允许在一端进行插入或删除操作 只允许在一端进行插入或删除操作 的线性表 重要术语: 队头、队尾、空队列 队列的特点: 先进先出 color{green}先进先出 先进先出 First In First Out ( F l

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包