数据结构【图的类型定义和存储结构】
数据结构之图
- 图的定义和概念
- 图的定义
- 图的术语
- 图的类型定义
- 图的存储结构
- 数组(邻接矩阵)表示法
- 无向图的邻接矩阵表示法
- 有向图的邻接矩阵表示法
- 网(即有权图)的邻接矩阵表示法
- 邻接矩阵的ADT定义
- 邻接表(链式)表示法
- 无向图
- 有向图
- 图的邻接表存储表示
- 邻接表操作
- 邻接表表示无向网
图的定义和概念
图的定义
图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E)。
其中,G表示一个图,V 是图 G 中顶点的有穷非空集合,E 是图 G 中边的有穷集合。
图形结构是多对多的关系。
无向图:每条边都是无方向的。
有向图:每条边都是有方向的。

特殊:
当线性表没有数据节点时,线性表为空表。 树中没有节点时,树为空树。
但是,在图中不允许没有顶点,但是可以没有边。
完全图:任意两个点都有一条边相连。

稀疏图:有很少边或弧的图(e<nlogn)。
稠密图:有较多边或弧的图。
图的术语
网:边/弧带权的图
邻接:
有边/弧相连的两个顶点之间的关系。
存在(Vi,Vj),则称Vi和Vj互为邻接点;
存在<Vi,Vj>,则称Vi邻接到Vj;, Vj邻接于Vi。
关联/依附:边/弧与顶点之间的关系。
顶点的度:
与该顶点相关联的边的数目,记为TD(v)。
在有向图中,顶点的度等于该顶点的入度与出度之和。
顶点 v 的入度是以 v 为终点的有向边的条数记作ID(v)。
顶点 v 的出度是以 v 为始点的有向边的条数记作 OD(v)。
有向图中顶点的度 = 入度 + 出度。
即 TD(V) = ID(V) + OD(V)。

路径:接续的边构成的顶点序列。
路径长度: 路径上边或弧的数目/权值之和。
回路(环): 第一个顶点和最后一个顶点相同的路径。
简单路径: 除路径起点和终点可以相同外,其余顶点均不相同的路径。
简单回路(简单环): 除路径起点和终点相同外,其余顶点均不相同的路径。

连通图:在无 (有) 向图G=( V, E) )中,若对任何两个顶点 v、u都存在从v 到 u 的路径,则称G是连通图 (强连通图)

权与网:
图中边或弧所具有的相关数称为权。表明从一个顶点到另一个顶点的距离或耗费。
子图:

连通分量(强连通分量):
无向图中的连通分量:

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

极小连通子图:
该子图是G的连通子图,在该子图中删除任何一条连通路径,子图不再连通。
生成树:包含无向图G的所有定点的极小连通子图。
生成森林:对非连通图,由各个连通分量的生成树的集合。

图的类型定义

基本操作P:
Create_Graph(&G,V,VR) : 图的创建操作
初始条件:无。
操作结果: 生成一个没有顶点的空图G。
GetVex(G,v) : 求图中的顶点v的值
初始条件: 图G存在,v是图中的一个顶点。
操作结果: 生成一个没有顶点的空图G
CreateGraph(&G,V,VR)
初始条件: V是图的顶点集,VR是图中弧的集合
操作结果: 按V和VR的定义 构造图G
DFSTraverse(G)
初始条件:图G存在
操作结果:对图进行深度优先遍历
BFSTraverse(G)
初始条件:图G存在
操作结果: 对图进行广度优先遍历
图的存储结构
图的逻辑结构:多对多
图没有顺序存储结构,但是可以用二维数组来表示元素间的关系。
链式存储结构:有数组表示法和邻接表(多重链表)表示法

数组(邻接矩阵)表示法

邻接矩阵的好处:
- 直观、简单、好理解 方便检查任意一对顶点间是否存在边
- 方便找任一顶点的所有“邻接点”(有边直接相连的顶点)
- 方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)
– 无向图:对应行(或列)非0元素的个数
– 有向图:对应行非0元素的个数是“出度”,对应列非0元素的个数是“入度
无向图的邻接矩阵表示法

完全图的邻接矩阵中,对角元素为0,其余1。
有向图的邻接矩阵表示法

网(即有权图)的邻接矩阵表示法

邻接矩阵的ADT定义

用邻接矩阵表示法创建无向网



在图中查找顶点:

邻接表(链式)表示法

无向图

特点:
- 邻接表不唯一
- 若无向图中有 n 个顶点、e 条边,则其邻接表需 n 个头结点和2e 个表结点。适宜存储稀疏图。
- 无向图中顶点v的度为第i个单链表中的结点数。
有向图

特点:
- 找出度易,找入度难。
- 顶点 v 的出度为第i个单链表中的结点个数。
- 顶点 v 的入度为整个单链表中邻接点域值是i-1的结点个数。
逆邻接表则相反
图的邻接表存储表示



邻接表操作
ALGraghG; //定义了邻接表表示的图G
G.vexum=5; G.arcnum=5; //图G包含5个顶点,5条边
G.vertices[1].data= 'b' //图G中第2个顶点是b
p=G.vertices[1].firtarc; //指针p指向顶点b的第一条边结点
p->adjvex =4; //p指针所指边结点是到下标为4的结点的边
邻接表表示无向网
(1)输入总顶点数和总边数
(2)建立顶点表,依次输入点的信息存入顶点表中,使每个表头结点的指针域初始化为NULL
(3)创建邻接表,依次输入每条边依附的两个顶点,确定两个顶点的序号和,建立边结点,将此边结点分别插入到vi和vj对应的两个边链表的头部

参考资料:数据结构与算法基础-王卓老师
相关文章:
数据结构【图的类型定义和存储结构】
数据结构之图 图的定义和概念图的定义图的术语 图的类型定义图的存储结构数组(邻接矩阵)表示法无向图的邻接矩阵表示法有向图的邻接矩阵表示法网(即有权图)的邻接矩阵表示法 邻接矩阵的ADT定义邻接表(链式)…...
PHP Smarty如何进行调试和错误处理?
欢迎来到PHP Smarty的世界。如果你在这里寻求如何调试和错误处理的方法,那么我可以向你保证,我们会让这个过程尽可能的有趣和轻松。 首先,让我们先来谈谈调试。在Smarty中,你可以使用以下几种方法来进行调试: 使用Sm…...
手搓vue3组件_0,打包配置
打包后引入项目是发现报错: Cannot read properties of null (reading isCE) TypeError: Cannot read properties of null (reading isCE)这个是由于vue版本冲突问题, 这里我引入了自己打包的ui组件库,但是ui组件库中打包进入了自己的vue,那么在此时使用时,如果你引入的自己的组…...
WebAssembly
WebAssembly(简称Wasm)是一种面向Web的二进制指令格式,用于在现代Web浏览器中运行高性能的可移植代码。它是一种跨平台、低级别的虚拟机技术,允许开发者将不同编程语言的代码编译成Wasm格式,然后在Web浏览器中运行。 …...
TM4C123库函数学习(2)--- LED闪烁,滴答定时器精准延时
前言 (1)阅读本文之前,需要先看TM4C123库函数学习(1)— 点亮LEDTM4C123的ROM函数简介keil开发环境搭建篇。 (2)TM4C123是M4的内核,拥有一个24位向下计数的SysTick定时器。࿰…...
Linux: network: tcp: back-off技术
当一个包需要重传的时候,会使用 exponential back-off来计算下一次重传的时间。 这个back-off的使用还是相当的广泛:《Adaptive Backoff Synchronization Technique》https://dl.acm.org/doi/pdf/10.1145/74926.74970 The general idea of backoff has …...
36 | 银行贷款数据分析
本文将以银行贷款数据分析为主题,深入探讨如何运用数据科学的方法,揭示银行贷款领域的内在规律和趋势。通过对贷款数据的分析,我们能够洞察不同类型贷款的分布情况、贷款金额的变化趋势,以及借款人的特征和还款情况等关键信息。 通过运用Python编程语言及相关的数据分析工…...
计算机网络-物理层(二)- 传输方式
计算机网络-物理层(二)- 传输方式 串型传输与并行传输 串行传输:是指数据是一个比特一个比特依次发送的,因此在发送端和接收端之间,只需要一条数据传输线路即可 并行传输:是指一次发送n个比特而不是一个比特,因此发送…...
超强台风“杜苏芮”来袭!如何实现安全可靠的通信?
暴雨来袭 超强台风“杜苏芮”是2023年太平洋台风季第5个被命名的台风,在我国东南沿海地区造成了巨大的影响,在7月28日登录福建省晋江市时,“杜苏芮”中心附近最大风力15级,达到了超强台风的等级;福州市区、闽侯、莆田…...
内网隧道—HTTP\DNS\ICMP
本文仅限于安全研究和学习,用户承担因使用此工具而导致的所有法律和相关责任! 作者不承担任何法律和相关责任! HTTP隧道 Neo-reGeorg Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目,目的是: 提高可用性࿰…...
QT mouseTracking
在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资源在默认状态下是要鼠标按下才能捕捉到。要想鼠标不按下时的移动也能捕捉到,需要setMouseTracking(true)。 如果鼠标跟踪失效(默认),…...
java操作mongdb【超详细】
Java操作 搭建 搭建 依赖 <!--mongodb--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>配置文件 spring:data:mongodb:host…...
JavaScript函数
什么是函数? 在 JavaScript 中,函数是一段被封装起来用于特定任务的可重复使用的代码块。 例如: function logger() {console.log(IT知识一享); }这样就创造了logger()函数,后续可以重复利用这个函数让它输出日志,后…...
RISC-V公测平台发布 · 使用YCSB测试SG2042上的MySQL性能
实验介绍: YCSB(全称为Yahoo! Cloud Serving Benchmark),该性能测试工具由Java语言编写(在之前的MC文章中也提到过这个,如果没看过的读者可以去看看之前MC那一期),主要用于云端或者…...
母婴即时零售行业数据可视化分析
对新晋父母来说,很多母婴用品如同一位贴心的助手,为他们的宝宝提供温暖和呵护。从婴儿床垫到可爱的拼图玩具,每一件用品都是为宝宝的成长和发展量身定制。对于繁忙的父母们而言,这些用品不仅帮助照顾孩子,更是为他们减…...
快速解决IDEA中类的图标变成J,不是C的情况
有时候导入新的项目后,会出现如下情况,类的图标变成J,如图: 直接上解决方法: 找到项目的pom.xml,右键,在靠近最下方的位置找到Add as Maven Project,点击即可。 此时,一般类的图标就…...
vue学习笔记
1.官网 v2官网 https://v2.cn.vuejs.org/ v3官网 https://cn.vuejs.org/ 2.vue引入 在线引入 <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> 下载引入(下载链接) https://v2.cn.vuejs.org/js/vue.js 3.初始化渲…...
难解的bug
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord 【Android TimeCat】 解决 context.startforegroundservice() did not then call service.startforeground() | XiChens Blog http://www…...
人文景区有必要做VR云游吗?如何满足游客出行需求?
VR云游在旅游行业中的应用正在快速增长,为游客带来沉浸式体验的同时,也为文旅景区提供了新的营销方式。很多人说VR全景展示是虚假的,比不上真实的景区触感,人文景区真的有必要做VR云游吗?我的答案是很有必要。 如果你认…...
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析
**本人是第六届字节跳动青训营(后端组)的成员。本文由博主本人整理自该营的日常学习实践,首发于稀土掘金:🔗Go语言入门指南:基础语法和常用特性解析 | 青训营 本文主要梳理自第六届字节跳动青训营ÿ…...
MT5 Zero-Shot中文数据增强效果展示:法律文书关键条款多版本生成集
MT5 Zero-Shot中文数据增强效果展示:法律文书关键条款多版本生成集 1. 项目概述 MT5 Zero-Shot Chinese Text Augmentation 是一个基于 Streamlit 和阿里达摩院 mT5 模型构建的本地化 NLP 工具。这个工具专门针对中文文本处理,能够在保持原意不变的前提…...
PP-DocLayoutV3在C++项目中的集成与性能优化
PP-DocLayoutV3在C项目中的集成与性能优化 新一代文档布局分析引擎的工程实践指南 1. 为什么选择PP-DocLayoutV3 在文档处理领域,传统的矩形框检测方法已经难以满足复杂场景的需求。想象一下,当你需要处理倾斜的表格、弯曲的文字区域或者不规则的文档元…...
次元画室微信小程序开发:打造个人AI画室轻应用
次元画室微信小程序开发:打造个人AI画室轻应用 想随时随地用手机把照片变成动漫风、油画风或者任何你喜欢的艺术风格吗?自己动手开发一个微信小程序,把“次元画室”这样的AI绘画模型装进口袋,听起来是不是很酷?今天&a…...
Rust async trait 的底层调度逻辑解析
Rust async trait 的底层调度逻辑解析 Rust 的异步编程模型以其高效和灵活著称,而 async trait 作为异步编程的核心抽象之一,其底层调度逻辑直接影响性能与资源利用率。理解其工作机制不仅能帮助开发者写出更高效的代码,还能避免常见的并发陷…...
Kairoa v1.1.18 版本:AI聊天功能协议支持升级,助力开发者高效开发
AI聊天功能协议支持再升级Kairoa作为一款专为开发者打造的跨平台桌面工具箱,其v1.1.18版本在AI聊天功能上进行了重要完善。此前,AI聊天模块仅支持OpenAI格式的接口,而此次更新新增了Anthropic Messages API和Google Gemini原生协议的支持。这…...
Unity集成Nano-Banana生成模型:游戏开发中的动态资源创建
Unity集成Nano-Banana生成模型:游戏开发中的动态资源创建 最近,游戏开发圈里有个话题挺火的:如何让游戏内容自己“长”出来?想象一下,你的游戏世界能根据玩家的行为,实时生成独一无二的建筑、角色甚至道具…...
MySQL优化全攻略:索引、SQL与分库分表的最佳实践鸵
一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...
PyTorch 2.8镜像中的模型安全与鲁棒性测试:对抗样本生成
PyTorch 2.8镜像中的模型安全与鲁棒性测试:对抗样本生成 1. 为什么我们需要关注模型安全性 想象一下,你开发了一个用于医疗影像诊断的AI系统,准确率高达99%。但在实际部署后,有人通过微小的图像改动就让系统做出完全错误的判断。…...
阿里文生图神器Z-Image-Turbo体验:开箱即用,中文提示词效果惊艳
阿里文生图神器Z-Image-Turbo体验:开箱即用,中文提示词效果惊艳 你有没有想过,用一句简单的中文描述,就能在几秒钟内得到一张可以直接用在电商海报、社交媒体或者设计稿里的高清图片?比如“一只穿着宇航服的熊猫&…...
Umi-CUT:三步批量处理图片黑边,解放你的生产力
Umi-CUT:三步批量处理图片黑边,解放你的生产力 【免费下载链接】Umi-CUT 项目地址: https://gitcode.com/gh_mirrors/um/Umi-CUT 还在为海量图片的黑边烦恼吗?Umi-CUT批量图片处理工具就是你的终极解决方案。这款开源软件专为图片批量…...
