当前位置: 首页 > news >正文

数据结构入门-图的基本概念与存储结构

前言

        图和树都是图论的内容,树是特殊的图。数据结构中的图论部分和离散数学有大量重叠,代码内容占少数,定义占多数,平时多看两眼可以帮助记忆。

图的定义

图是由顶点(vertex)的有穷非空集合和顶点之间的边(eage)的集合组成的。

通常记为G(V,E),其中G表示一个图,V是图G中顶点的集合,E是边的集合。

V(G)和E(G)通常分别表示图G的顶点和边集合。

注意:对于图这种数据结构,不允许没有顶点,但边集可以为空。

 无向图与有向图

V(G)={0,1,2,3}

E(G)={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}

无向图边集用圆括号表示

V(G)={0,1,2}

E(G)={<0,1>,<1,2>,<1,0>}

有向图边集用尖括号表示 

边也称为弧,有向图的弧由弧尾指向弧头。

 简单图与多重图

限制一:图中不能有从顶点到其自身的边。

限制二:同一条边再图中不能出现两次或者两次以上。

不满足以上两条限制的图称为多重图。

 在数据结构的学习中,如果没有特殊提及,我们所学习的所有图都是指简单图。

完全图

 完全图:具有最多边数的图称为完全图。

对于一个具有n个顶点的无向完全图,边数量的最大值尾n(n-1)/2

对于一个具有n个顶点的有向完全图,边数量的最大值为n(n-1)

 

 路径和路径长度

路径:从一个顶点开始,经过一系列的边到达另外一个顶点形成的顶点序列。

路径长度:路径上边的条数。

回路(环):起点和终点相同,路径{0,3,1,0}是一个回路(环)。

 

 简单路径

简单路径:如果路径中不出现相同的顶点,则称为简单路径。

简单回路:除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路。

 顶点的度

度:对于无向图,顶点的度指的是与顶点相关联边的数目。

入度:在有向图中,对于顶点v,箭头指向v的边的数目。

出度:在有向图中,对于顶点v,从该顶点出发的边的数目。

 

 度与边的关系

在无向图中,假设具有n个顶点,e条边

图中所有顶点度之和等于边数的两倍

对于有向图,所有顶点的出度之和与入度之和相等,弧的数量也相等。

子图

图G的子图H,H满足V(H)是V(G)子集且E(H)是E(G)子集。

 

 连通图

连通:在无向图中,如果从顶点v到顶点w有路径,则称顶点v到顶点w是连通的。

如果对于图中任意两个顶点都是连通的,则称此图为连通图。

 连通分量

无向图中的极大连通子图称为连通分量

连通分量为子图

子图为连通图

连通子图含有极大顶点数

具有极大顶点数的连通子图包含依附于这些顶点的所有边。

 

强连通图

强连通图:在有向图中,对于每一对顶点v和w,从v到w和从w到v都有路径,则称该有向图为强连通图。

有向图中顶点极大强连通子图称为有向图的强连通分量。

 

 生成树

生成树:指含有图中全部顶点的极小连通子树。

注意:包含所有顶点n,但只有足以构成一棵树的n-1条边。

 边的权和网

在一个图中,每条边可以标注上一个代表某种含义的数值,该数值称为这个边的权值网;边上带有权值的图,也称为带权图。

 图的存储结构

 邻接矩阵-无向

 将上面的图以两个数组的形式存储起来:

 

 在两个顶点之间,如果有连线,就用1表示,无连线就用0表示。

无向图的邻接矩阵具有按对角线对称的性质。

邻接矩阵-有向

 

 

 

 邻接矩阵-带权值

 

在带权图的边数组中,用∞符号来表示两个边之间没有关系,用权值来表示该边的权。 

邻接表-无向

 

 

 邻接表中用链表来表示每个顶点的关系,用数组下标来标记顶点,头节点是该顶点,链表节点中存储的数字是与该顶点相连的顶点下标。

邻接表-有向

 

 在这个邻接表中节点存储的都是出边的对应顶点,逆邻接表则存储入边的对应顶点。

逆邻接表

 

 十字链表

 

 tailvex表示弧尾,headvex表示弧头,headlink指向该节点被弧头链接的顶点的节点,tailink指向被弧尾链接的顶点的节点。

 如上图第一个链表的首节点中,0和3就代表从顶点V0指向顶点V3的一条边。

 在上述链表中,用横向链接的节点表示出边关系,用纵向链接的节点表示入边关系,横纵交错,构成十字链表。

邻接多重表

 

 ivex和jvex是某一条便连接的两个顶点的下标

ilink指同连接顶点ivex的下一条边

jlink指同连接顶点jvex的下一条边

 

 

先给出四个顶点的节点和五条边的节点。

 

按照每个顶点的顺序依次连接节点 。这样就解决了无向图的邻接表过于冗杂的问题。

http://www.lryc.cn/news/577214.html

相关文章:

  • 【软考高项论文】论信息系统项目的干系人管理
  • 利用不坑盒子的Copilot,快速排值班表
  • upload-labs靶场通关详解:第15-16关
  • docker-compose部署Nacos、Seata、MySQL
  • 《Effective Python》第十一章 性能——使用 timeit 微基准测试优化性能关键代码
  • 初始CNN(卷积神经网络)
  • C++ cstring 库解析:C 风格字符串函数
  • 深入理解Webpack的灵魂:Tapable插件架构解析
  • 人工智能和云计算对金融未来的影响
  • 大模型在急性左心衰竭预测与临床方案制定中的应用研究
  • spring-ai 工作流
  • Github 2FA(Two-Factor Authentication/两因素认证)
  • 基于Flask技术的民宿管理系统的设计与实现
  • [论文阅读] Neural Architecture Search: Insights from 1000 Papers
  • macos 使用 vllm 启动模型
  • 在 VS Code 中安装与配置 Gemini CLI 的完整指南
  • java JNDI高版本绕过 工具介绍 自动化bypass
  • 【Debian】1- 安装Debian到物理主机
  • leedcode:找到字符串中所有字母异位词
  • 【Actix Web】Rust Web开发JWT认证
  • C#跨线程共享变量指南:从静态变量到AsyncLocal的深度解析
  • Excel转pdf实现动态数据绑定
  • Java设计模式之结构型模式(外观模式)介绍与说明
  • BUUCTF在线评测-练习场-WebCTF习题[MRCTF2020]你传你[特殊字符]呢1-flag获取、解析
  • FPGA实现CameraLink视频解码转SDI输出,基于LVDS+GTX架构,提供2套工程源码和技术支持
  • AWS 开源 Strands Agents SDK,简化 AI 代理开发流程
  • python:运行时报错 No module named flask
  • CAU数据挖掘 支持向量机
  • Instruct-GPT奖励模型的损失函数与反向传播机制解析
  • Linux 系统管理:高效运维与性能优化