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

数据结构之图

  • 图的定义和概念
  • 图的定义
    • 图的术语
  • 图的类型定义
  • 图的存储结构
    • 数组(邻接矩阵)表示法
      • 无向图的邻接矩阵表示法
      • 有向图的邻接矩阵表示法
      • 网(即有权图)的邻接矩阵表示法
    • 邻接矩阵的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.rhkb.cn/news/82354.html

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

相关文章

opencv-32 图像平滑处理-高斯滤波cv2.GaussianBlur()

在进行均值滤波和方框滤波时&#xff0c;其邻域内每个像素的权重是相等的。在高斯滤波中&#xff0c;会将中心点的权重值加大&#xff0c;远离中心点的权重值减小&#xff0c;在此基础上计算邻域内各个像素值不同权重 的和。 基本原理 在高斯滤波中&#xff0c;卷积核中的值不…

【图像去噪】基于进化算法——自组织迁移算法(SOMA)的图像去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

vue3实现自定义select下拉框内容之城市区域篇

分享-2023年资深前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的&#x1fa9c; 需求分析&#xff1a; 1、实现一个区域下拉选项与现有ui组件库不同&#xff0c;支持多选、单选需求 2、支持选中区域后-全选中当前区域下的所有城市信息 3、…

项目实战 — 消息队列(5){统一硬盘操作}

前面已经使用数据库管理了交换机、绑定、队列&#xff0c;然后又使用了数据文件管理了消息。 那么&#xff0c;这里就创建一个类&#xff0c;讲之前的两个部分整合起来&#xff0c;对上层提供统一的一套接口&#xff0c;表示硬盘上存储的所有的类的信息。 /* * 用这个类来管理…

企业计算机服务器中了locked勒索病毒怎么办,如何预防勒索病毒攻击

计算机服务器是企业的关键信息基础设备&#xff0c;随着计算机技术的不断发展&#xff0c;企业的计算机服务器也成为了众多勒索者的攻击目标&#xff0c;勒索病毒成为当下计算机服务器的主要攻击目标。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器被locked…

Unico-GUI软件关于ST传感器机器学习(MLC)基本操作步骤

准备工作 UNICO-GUI软件用于意法半导体产品组合&#xff08;加速度计、陀螺仪、磁力计和环境传感器&#xff09;中所有MEMS传感器的评估板。它可用于Linux&#xff08;基于Debian&#xff09; / Mac OS X / Windows平台。 Unico-GUI - MEMS evaluation kit software package …

优维低代码实践:对接数据

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

工厂方法模式-java实现

介绍 工厂方法模式&#xff0c;通过把工厂抽象为一个接口&#xff0c;这样当我们新增具体产品的时候&#xff0c;就只需要实现一个新的具体工厂类即可。一个具体工厂类&#xff0c;对应着一个产品。 请注意&#xff1a;在工厂方法模式中&#xff0c;一个具体工厂类只对应生产…

Android 数据库之GreenDAO

GreenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架&#xff0c;将 Java 对象映射到 SQLite 数据库中&#xff0c;我们操作数据库的时候&#xff0c;不再需要编写复杂的 SQL语句&#xff0c; 在性能方面&#xff0c;greenDAO 针对 Android 进行了高度优化&#xff0c;…

四、web应用程序技术——HTTP

文章目录 1 HTTP请求2 HTTP响应3 HTTP方法4 URL5 HTTP消息头5.1 常用消息头5.2 请求消息头5.3 响应消息头 6 cookie7 状态码8 HTTP代理9 HTTP身份验证 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是访问万维网使用的核心通信协议&…

Sentieon | 每周文献-Multi-omics(多组学)-第九期

多组学系列文章-1 标题&#xff08;英文&#xff09;&#xff1a; Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated model标题&#xff08;中文&#xff09;&#xff1a; 基于多组学分析和综合模型…

Spark Catalog详解

前言 旁边的实习生说:我想要用spark代码中对hive库中的内部表和外部表进行批量删除(包括数据),咋感觉网上搜了一圈都找不到解决方案啊,spark这么鸡肋吗? 我:你应该静下心来好好把spark基础知识进行全面学习。 实习生:难道spark有这功能,而我没有学习过?咋弄啊? 我:…

STM32基础入门学习笔记:开发板 电路原理与驱动编程

文章目录&#xff1a; 一&#xff1a;触摸按键 1.触摸按键驱动程序&#xff08;点击&#xff09; touch_key.h touch_key.c main.c 2.按键双击和长按程序 touch_key.h touch_key.c main.c 3.触摸按键滑动程序 main.c 二&#xff1a;数码管显示 1.数码管RTC时钟LE…

JAVA电商平台免费搭建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

如何使用Pycharm 快速搭建 Django 项目 (分享详细图文教程)

1. 准备工作 在开始创建Django项目之前&#xff0c;需要先确保已经安装了Python和Pycharm。并且python中已经安装好了Django依赖。 1安装python&#xff08;这里我安装使用的是python3.11.4稳定版本&#xff09; 官网下载太慢了这里直接贴网盘下载连接了&#xff0c;一起贴出py…

使用Python和wxPython将图片转换为草图

导语: 将照片转换为艺术风格的草图是一种有趣的方式&#xff0c;可以为您的图像添加独特的效果。在本文中&#xff0c;我们将介绍如何使用Python编程语言和wxPython图形用户界面库来实现这一目标。我们将探讨如何使用OpenCV库将图像转换为草图&#xff0c;并使用wxPython创建一…

AI和ChatGPT:人工智能的奇迹

AI和ChatGPT&#xff1a;人工智能的奇迹 引言什么是人工智能&#xff1f;ChatGPT&#xff1a;AI的语言之王ChatGPT的工作原理ChatGPT的优势和挑战AI和ChatGPT的未来展望结论 引言 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一项令人兴奋的…

不看后悔一辈子!不看错过50K!历尽心血总结Redis全局命令

前言&#xff1a; &#x1f4d5;作者简介&#xff1a;热爱编程的敖云岚&#xff0c;致力于C、Java、Python等多编程语言&#xff0c;热爱编程和长板的运动少年&#xff01; &#x1f4d8;相关专栏&#xff1a;Java基础语法&#xff0c;JavaEE初阶&#xff0c;数据库&#xff0c…

【用于全变分去噪的分裂布雷格曼方法】实施拆分布雷格曼方法进行总变异去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

流量分析日志查看

一流量分析 buuctf wireshark 从题目出发&#xff0c;既然是上传登录信息&#xff0c;就直接过滤post请求&#xff0c;即搜索 http.request.methodPOST&#xff0c;因为上传用户登录信息使用的一定是http里的post方法 模式过滤 http.request.method “GET” http.request.…