数据结构【图的类型定义和存储结构】

数据结构之图

  • 图的定义和概念
  • 图的定义
    • 图的术语
  • 图的类型定义
  • 图的存储结构
    • 数组(邻接矩阵)表示法
      • 无向图的邻接矩阵表示法
      • 有向图的邻接矩阵表示法
      • 网(即有权图)的邻接矩阵表示法
    • 邻接矩阵的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对应的两个边链表的头部
在这里插入图片描述

参考资料:数据结构与算法基础-王卓老师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/34234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode面试题:动物收容所(考查对队列的理解和运用)

题目&#xff1a; 有家动物收容所只收容狗与猫&#xff0c;且严格遵守“先进先出”的原则。在收养该收容所的动物时&#xff0c;收养人只能收养所有动物中“最老”&#xff08;由其进入收容所的时间长短而定&#xff09;的动物&#xff0c;或者可以挑选猫或狗&#xff08;同时…

聊一下互联网开源变现

(点击即可收听) 互联网开源变现其实是指通过开源软件或者开放源代码的方式&#xff0c;实现收益或盈利。这种方式越来越被广泛应用于互联网行业 在互联网开源变现的模式中&#xff0c;最常见的方式是通过捐款、广告、付费支持或者授权等方式获利。 例如&#xff0c;有些开源软件…

数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 假设数组非空&#xff0c;并且一定存在满足条件的数字。 思考题&#xff1a; 假设要求只能使用 O(n) 的时间和额外 O(1) 的空间&#xff0c;该怎么做呢&#xff1f; 数据范围 数组长度 [1,10…

内网穿透实战应用-——【如何在树莓派上安装cpolar内网穿透】

如何在树莓派上安装cpolar内网穿透 文章目录 如何在树莓派上安装cpolar内网穿透前言1.在树莓派上安装cpolar2.查询cpolar版本号3.激活本地cpolar客户端4.cpolar记入配置文件 前言 树莓派作为一个超小型的电脑系统&#xff0c;虽然因其自身性能所限&#xff0c;无法如台式机或笔…

【金融量化】Python实现根据收益率计算累计收益率并可视化

1 理论 理财产品&#xff08;本金100元&#xff09; 第1天&#xff1a;3% &#xff1a;&#xff08;13%&#xff09; ✖ 100 103 第2天&#xff1a;2% &#xff1a;&#xff08;12%&#xff09;✖ 以上 103 2.06 第3天&#xff1a;5% : &#xff08;15%&#xff09;✖ 以上…

游戏行业实战案例 5 :玩家在线分布

【面试题】某游戏数据后台设有“登录日志”和“登出日志”两张表。 「登录日志」记录各玩家的登录时间和登录时的角色等级。 「登出日志」记录各玩家的登出时间和登出时的角色等级。 其中&#xff0c;「角色 id 」字段唯一识别玩家。 游戏开服前两天&#xff08; 2022-08-13 至…

mfc 编辑框限制

DoDataExchange由框架调用&#xff0c;作用是交互并且验证对话框数据&#xff0c;主要由(DDX) 和 (DDV)宏实现。 永远不要直接调用这个函数&#xff0c;而是通过UpdateData(TRUE/FALSE)实现控件与变量之间值的传递。 当然你也可以不使用DoDataExchange而完成控件与变量之间值…

Python-组合数据类型

今天要介绍的是Python的组合数据类型 整理不易&#xff0c;希望得到大家的支持&#xff0c;欢迎各位读者评论点赞收藏 感谢&#xff01; 目录 知识点知识导图1、组合数据类型的基本概念1.1 组合数据类型1.2 集合类型概述1.3 序列类型概述1.4 映射类型概述 2、列表类型2.1 列表的…

java下载JDK

1.去官网下载 https://www.oracle.com/java/technologies/javase-downloads.html 2.点击 傻瓜式安装 注意选择版本跟电脑系统就行 下载后文件的作用

32个关于FPGA的学习网站

语言类学习网站 1、HDLbits 网站地址&#xff1a;https://hdlbits.01xz.net/wiki/Main_Page 在线作答、编译的学习Verilog的网站&#xff0c;题目很多&#xff0c;内容丰富。非常适合Verilog初学者&#xff01;&#xff01;&#xff01; 2、牛客网 网站地址&#xff1a;https:…

Flink CDC系列之:TiDB CDC 导入 Elasticsearch

Flink CDC系列之&#xff1a;TiDB CDC 导入 Elasticsearch 一、通过docker 来启动 TiDB 集群二、下载 Flink 和所需要的依赖包三、在TiDB数据库中创建表和准备数据四、启动Flink 集群&#xff0c;再启动 SQL CLI五、在 Flink SQL CLI 中使用 Flink DDL 创建表六、Kibana查看Ela…

不知道打仗之害,就不知道打仗之利

不知道打仗之害&#xff0c;就不知道打仗之利 【安志强趣讲《孙子兵法》第7讲】 【原文】 夫钝兵挫锐&#xff0c;屈力殚货&#xff0c;则诸侯乘其弊而起&#xff0c;虽有智者&#xff0c;不能善其后矣。 【注释】 屈力殚货&#xff1a;屈力&#xff0c;指力量消耗&#xff0c;…

工业巡检ar沉浸式互动培训体验实现更加直观、生动的流程展示

以往的工业手工巡检效率极低&#xff0c;错误率偏高&#xff0c;漏检问题严重&#xff0c;会因为现场人员对机械设备的早期维护、操作不会&#xff0c;而影响正常交付和服务&#xff0c;智慧工业是工业智能化和信息化的重要体现&#xff0c;在巡检方面自然也要同步提升&#xf…

使用Vue Query来获取数据

使用Vue Query来获取数据 构建现代大规模应用程序最具挑战性的方面之一是数据获取。加载和错误状态、分页、过滤、排序、缓存等功能会增加复杂性&#xff0c;并且经常会因大量样板代码而使应用程序变得臃肿。 vue query使用声明性语法处理和简化数据获取&#xff0c;并在幕后…

维深(Wellsenn):2023中国消费端VR内容开发商调研报告(附下载

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 国内互联网大厂商入局VR&#xff0c;字节跳动、网易表态明确。字节跳动2021年收购国内头部VR硬件厂商PICO后&#xff0c;加速构建VR内容生态&#xff0c;2021年 成立海南创见未来当前已推出VR视频应用…

大语言模型之三 InstructGPT训练过程

大语言模型 GPT历史文章中简介的大语言模型的的发展史&#xff0c;并且简要介绍了大语言模型的训练过程&#xff0c;本篇文章详细阐述训练的细节和相关的算法。 2020年后全球互联网大厂、AI创业公司研发了不少AI超大模型&#xff08;百亿甚至千亿参数&#xff09;&#xff0c;…

【C语言】结构体(1)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C语言的结构体&#xff08;初阶&#xff09;&#xff0c;以后会出进阶的&#xff0c;如果大家觉得我写的不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 ① WHO IS 结构体② 结构体的作…

【学习日记】【FreeRTOS】手动任务切换详解

前言 本文是关于 FreeRTOS 中实现两个任务轮流切换并执行的代码详解。目前不支持优先级&#xff0c;仅实现两个任务轮流切换。 一、任务的自传 任务从生到死的过程究竟是怎么样的呢&#xff1f;&#xff08;其实也没死&#xff09;&#xff0c;这个问题一直困扰着我&#xf…

LeetCode[164]最大间距

难度&#xff1a;Hard 题目&#xff1a; 给定一个无序的数组 nums&#xff0c;返回 数组在排序之后&#xff0c;相邻元素之间最大的差值 。如果数组元素个数小于 2&#xff0c;则返回 0 。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 示例 1: 输入: …

nacos 403错误

403错误 2023-08-12 18:04:55,418 [main] ERROR [com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder:106] [trace,span,parent] - get data from Nacos error,dataId:gateway-server.yaml, com.alibaba.nacos.api.exception.NacosException: <html><body&…