【数据结构】图的基本概念,图的存储结构(邻接矩阵;邻接表;十字链表;邻接多重表)

  欢~迎~光~临~^_^

目录

1、图的基本概念

2、图的存储结构

2.1邻接矩阵

2.2邻接表 

2.3十字链表

2.4邻接多重表 

2.5图的四种存储结构的对比


1、图的基本概念

        图是由一组节点(通常称为顶点)和一组连接这些节点的边(通常称为边)组成的数据结构。图可以用于表示各种实际问题,如网络拓扑、道路系统、社交网络和电路等。

以下是图的一些基本概念:

  1. 顶点(Vertex):图中的节点。

  2. 边(Edge):图中连接顶点的线段。

  3. 有向图(Directed Graph):每条边都有一个指向性,即从一个顶点到另一个顶点的方向只能是一个方向。全部顶点的入度之和与出度之和相等。顶点的度等于其入度和出度之和。

  4. 无向图(Undirected Graph):边没有指向性,从一个顶点到另一个顶点的方向没有限制。全部顶点的度的和等于边的2倍。

  5. 边权(Edge Weight):边上附加的一个数值,代表两个顶点之间的距离或者权值。

  6. 度(Degree):一个顶点的度是指与该顶点相连的边的数目。在有向图中,度被分为入度和出度。

  7. 路径(Path):在图中,路径是通过边从一个顶点到另一个顶点的一系列顶点。

  8. 周长(Cycle):一个简单图中,如果从一个顶点出发经过若干边回到该顶点,称这个路径为周长。

  9. 连通图(Connected Graph):如果一个无向图中的任意两个顶点都可以通过一些边相连到达,则称该图为连通图。

  10. 强联通图(Strongly Connected Graph):对于有向图而言,如果任意两个顶点之间都存在双向路径,则称该图为强联通图。

  11. 带权图(Weighted Graph):图中的边带有权值或者距离。

  12. 子图(Subgraph):在一个图中取出一部分顶点和边所组成的图。

  13. 简单路径:顶点不重复出现的路径。

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

  15. 连通分量:无向图中的极大连通子图。

  16. 强连通分量:有向图中的极大连通子图。

  17. 无向完全图:有n(n-1)/2条边。

  18. 有向完全图:有n(n-1)条边。

常见考点:

2、图的存储结构

2.1邻接矩阵

        邻接矩阵用一个二维数组来表示图中各个顶点之间的连通关系。邻接矩阵A的大小为nxn,其中A[i][j]表示节点i到节点j是否存在边,如果存在则为1,否则为0。

邻接矩阵的定义如下:

设 G=(V,E) 是一个无向图,其中 V={v1,v2,...,vn} 为顶点集合,E 为边集合。邻接矩阵 A 是一个 n×n 的矩阵,其中 A(i,j)=1 表示 vi 和 vj 之间有一条边,A(i,j)=0 表示 vi 和 vj 之间没有边。

对于有向图,邻接矩阵的定义稍有不同,具体如下:

设 G=(V,E) 是一个有向图,其中 V={v1,v2,...,vn} 为顶点集合,E 为边集合。邻接矩阵 A 是一个 n×n 的矩阵,其中 A(i,j)=1 表示存在一条从 vi 到 vj 的有向边,A(i,j)=0 表示不存在这样的有向边。

在C语言中,我们可以使用二维数组来实现邻接矩阵存储结构,结构定义如下:

#define MAX_VERTEX_NUM 100  // 定义图中顶点最大数量typedef struct {int vertex[MAX_VERTEX_NUM];  // 存储顶点信息int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM];  // 存储边信息int vertexNum;  // 实际顶点数量int edgeNum;  // 实际边数量
} GraphMatrix;

        其中,`vertex`数组存储图中所有顶点的信息,`edge`数组存储边的信息,`vertexNum`和`edgeNum`分别表示实际顶点和边的数量。

        注意,使用邻接矩阵存储大型图时,可能会遇到空间限制的问题,因此需要针对具体情况酌情调整顶点数量的上限。

2.2邻接表 

图的邻接表是一种表示无向图或有向图的数据结构。它将每个顶点与与之相邻的顶点列表关联起来,其中每个顶点的邻居顶点列表都存储在该顶点对应的链表中。

例如,下面是一个无向图的邻接表表示:

0: 1 -> 2 -> 3
1: 0 -> 2
2: 0 -> 1 -> 3
3: 0 -> 2

        其中,每行表示一个顶点和它的邻居顶点列表。例如,第一行表示顶点0和它的邻居顶点1、2、3。

        在有向图的邻接表表示中,每个顶点的邻居顶点列表存储的是它的出边或入边,具体取决于是表示出度还是入度。

        邻接表适合表示稀疏图,因为它只存储了每个顶点的度数大小的信息,而对于度数较小的顶点,它所对应的链表长度也比较短。

 C语言,图的邻接表存储结构定义如下:

#define MAX_VERTEX_NUM 20 // 图中顶点的最大个数// 边表结点
typedef struct ArcNode {int adjvex;             // 该弧所指向的顶点的位置struct ArcNode *next;   // 指向下一条弧的指针// 如果需要存储边的权值,可以在此处添加一个 weight 变量
} ArcNode;// 顶点表结点
typedef struct VNode {char data;              // 顶点信息ArcNode *first;         // 指向第一条依附该顶点的弧的指针
} VNode, AdjList[MAX_VERTEX_NUM];// 图
typedef struct {AdjList vertices;       // 邻接表int vexnum, arcnum;     // 图的顶点数和弧数
} ALGraph;

        在邻接表中,每个顶点都由一个顶点表结点表示,其中 data 为顶点信息,first 指向第一条依附该顶点的弧的指针。每个弧都由一个边表结点表示,其中 adjvex 指向该弧所指向的顶点在顶点表中的位置,next 指向下一条依附该顶点的弧的指针。同时,邻接表以一个包含图中所有顶点的顶点表结点数组表示。

2.3十字链表

        图的十字链表是一种存储有向图的方式,它使用链表来表示图中的节点和边。它的特点是每个节点维护四个指针,分别指向它的出边、入边、右边和下边。这样,我们可以快速访问每个节点的邻居节点和以该节点为起点或终点的边。

具体来说,每个节点维护四个指针:

1. 出边指针:指向以该节点为起点的第一条边。

2. 入边指针:指向以该节点为终点的第一条边。

3. 右边指针:指向与该节点在同一层级的下一个节点。

4. 下边指针:指向与该节点在下一层级的相邻节点,通常用于存储节点的入度信息。

        这种存储方式在图的遍历和其他算法中具有很好的效率,尤其是对稀疏图而言。因此,在实际应用中,十字链表常被用于表示稀疏图和网络。

 C语言,图的十字链表存储结构的定义:

#define MAX_VERTEX_NUM 20 // 最大顶点数// 边表结构体定义
typedef struct ArcNode {int tailvex; // 弧尾int headvex; // 弧头struct ArcNode* hlink; // 指向同一个弧头的下一条边struct ArcNode* tlink; // 指向同一个弧尾的下一条边// 其他信息,如权值等
} ArcNode;// 顶点表结构体定义
typedef struct VexNode {char data; // 顶点信息ArcNode* firstin; // 指向以该顶点为弧头的第一条边ArcNode* firstout; // 指向以该顶点为弧尾的第一条边
} VexNode;// 十字链表存储结构体定义
typedef struct {VexNode vexs[MAX_VERTEX_NUM]; // 顶点表int vexnum; // 当前图的顶点数int arcnum; // 当前图的边数
} OLGraph;

2.4邻接多重表 

        邻接多重表是一种表示无向图的数据结构,它通过将每个顶点和边都表示为一个结点,并对它们进行链表连接来存储图。

邻接多重表的结构如下:

1. 图中每个顶点都有一个结点,包含以下信息:

- data:顶点的数据元素。
- firstedge:指向与该顶点相连的第一条边的指针(即链表中的头结点)。

2. 图中每条边都有一个结点,包含以下信息:

- mark:标记此边是否被访问过。
- ivex:该边连接的另一个顶点的位置(下标)。
- ilink:指向与该顶点相连的下一条边的指针。
- jvex:该边连接的另一个顶点的位置(下标)。
- jlink:指向与该顶点相连的下一条边的指针。

邻接多重表的优点是:

- 可以快速查找一个顶点的所有邻接点和边。
- 可以快速删除一个图中的点和边。
- 占用的存储空间比邻接表和邻接矩阵更少。

邻接多重表的缺点是:

- 不方便进行图的遍历。
- 在插入一个新顶点时,需要为其分配两个结点,因此需要更多的存储空间。

 C语言,图的邻接多重表存储结构的定义:

#define MAX_VERTEX_NUM 20  // 最大顶点数typedef struct ArcNode {  // 边表结点int ivex, jvex;  // 该边依附的两个顶点在顶点表中的位置struct ArcNode *ilink, *jlink;  // 分别指向依附这两个顶点的下一条边
} ArcNode;typedef struct VNode {  // 顶点表结点char data;  // 顶点信息ArcNode *firstarc;  // 指向第一条依附该顶点的边的指针
} VNode;typedef struct {  // 邻接多重表VNode vertices[MAX_VERTEX_NUM];  // 顶点表int vexnum, arcnum;  // 图的当前顶点数和边数
} AMLGraph;

        该结构体定义了一个邻接多重表,其中顶点表的每个元素是一个VNode结构体,表示一个顶点。VNode结构体中包含了指向以该顶点为起点的第一条边的指针firstarc。边表结点ArcNode表示一条边,其中包含了ivex和jvex两个顶点在顶点表中的位置,以及指向依附这两个顶点的下一条边的指针ilink和jlink。

2.5图的四种存储结构的对比

 

🤞❤️🤞❤️🤞❤️图的知识点总结就到这里啦,如果对博文还满意的话,劳烦各位大佬儿动动“发财的小手”留下您对博文的赞和对博主的关注吧🤞❤️🤞❤️🤞❤️

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

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

相关文章

Linux中sudo命令的添加和操作

使用 sudo分配权限 (1)修改/etc/sudoers 文件分配文件 # chmod 740 /etc/sudoers # vi /etc/sudoers 找到这行:root ALL(ALL) ALL, 在这行下面添加 xxx ALL(ALL) ALL (这里的xxx就是你的普通用户,而ruice就是我的普通用户 ) 编…

外汇天眼:外汇交易市场与股票交易市场优势对比!

在纽约证券交易所上市的股票大约有2800多只。纳斯达克证券交易所还列出了另外3,300多家股票。您将交易哪一个?有时间留在这么多公司的头上吗?在外汇交易中,有数十种货币交易,但是大多数市场参与者交易了七种主要货币对。难道七个主…

微信开放平台第三方开发,实现代小程序备案申请

大家好,我是小悟 微信小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一个…

如何利用播放器节省20%点播成本

点播成本节省的点其实涉及诸多部分,例如:CDN、转码、存储等,而利用播放器降本却是很多客户比较陌生的部分。火山引擎基于内部支撑抖音集团相关业务的实践,播放器恰恰是成本优化中最重要和最为依赖的部分。 火山引擎的视频团队做了…

华为云云耀云服务器L实例评测|Docker版的Minio安装 Springboot项目中的使用 结合vue进行图片的存取

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到过MySQL数据库被攻击的情况,Redis被攻击的情况,教训是密码不能太简单。在使用服务器时,学习到很多运维相关的知识。 本篇博客介绍如何在Linux中安装mi…

IP协议的相关特性

文章目录 一.IP协议二. IP地址不够用了?1. 动态分配IP(DHCP)2. NAT机制(网络地址转换)(理解网络结构的关键要点)3. IPv64. 为什么IPv6不如NAT受用? 二. IP组成三. 路由转发(了解) 一.IP协议 概念 IP地址(Internet Protocol Address)是指互联网协议地…

FL Studio21水果编曲软件怎么下载中文版?

FL Studio21这款软件在国内被广泛使用,因此又被称为"水果"。它提供音符编辑器,可以针对作曲者的要求编辑出不同音律的节奏,例如鼓、镲、锣、钢琴、笛、大提琴、筝、扬琴等等任何乐器的节奏律动。此外,它还提供了方便快捷…

代码随想录算法训练营第57天| 647. 回文子串,516.最长回文子序列,动态规划总结

链接: 647. 回文子串 链接: 516.最长回文子序列 链接: 动态规划总结 647. 回文子串 理解dp数组的含义很重 class Solution {public int countSubstrings(String s) {char[] chars s.toCharArray();boolean[][] dp new boolean[s.length()][s.length()];int res 0;// 遍…

目标检测:Edge Based Oriented Object Detection

论文作者:Jianghu Shen,Xiaojun Wu 作者单位:Harbin Institute of Technology Shenzhen 论文链接:http://arxiv.org/abs/2309.08265v1 内容简介: 1)方向:遥感领域中的目标检测技术 2)应用&…

购物H5商城架构运维之路

一、引言 公司属于旅游行业,需要将旅游,酒店,购物,聚合到线上商城。通过对会员数据进行聚合,形成大会员系统,从而提供统一的对客窗口。 二、业务场景 围绕更加有效地获取用户,提升用户的LTV&a…

Python线程和进程

1、深度解析Python线程和进程 一篇文章带你深度解析Python线程和进程 - 知乎使用Python中的线程模块,能够同时运行程序的不同部分,并简化设计。如果你已经入门Python,并且想用线程来提升程序运行速度的话,希望这篇教程会对你有所帮…

AI写作宝-为什么要使用写作宝

写作一直是一项需要创造力和思考的任务,人工智能(AI)正逐渐成为我们写作过程中的一位新伙伴。AI写作宝等在线AI写作工具正日益普及,为我们提供了更多的写作选择和可能性。 AI写作宝:什么是它们,以及它们能做…

【计算机网络】——传输层

//图片取自王道,仅做交流学习 一、传输层提供的服务 物理层、数据链路层、网络层是通信子网。 传输层:它属于面向通信部分的最高层,同时也是用户功能的最低层 为应用层提供通信服务使用网络层的服务 网络层提供主机之间的逻辑通信。 1、传输…

数据结构——八叉树

八叉树(Octree)是一种用于表示和管理三维空间的树状数据结构。它将三维空间递归地分割成八个八分体(octant),每个八分体可以继续分割,以实现对三维空间的更精细的划分。八叉树通常用于解决空间搜索和查询问…

GitHub Copilot Chat

9月21日,GitHub在官网宣布,所有个人开发者可以使用GitHub Copilot Chat。用户通过文本问答方式就能生成、检查、分析各种代码。 据悉,GitHub Copilot Chat是基于OpenAI的GPT-4模型打造而成,整体使用方法与ChatGPT类似。例如&…

菜单栏图标管理软件Bartender mac 5.0.10中文版介绍

Bartender mac是一款菜单栏图标管理软件,功能强大,可以快速管理菜单栏的图标、显示内容和时间,只需在菜单栏中滑动或滚动、单击菜单栏,或者如果您愿意,只需将鼠标悬停即可立即访问隐藏的菜单栏项目。 Bartender软件介绍…

SAP 选择屏幕动态通过Radio Button 显示与隐藏以及控制是否必输

如何在选择屏幕上进行动态展示屏幕字段,并且进行必输项检查控制 1. 选择屏幕定义 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS: p_r1 TYPE c RADIOBUTTON GROUP grp USER-COMMAND uc DEFAULT X. &q…

基于Java+SpringBoot+Vue物流管理小程序系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于B50610 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包UDP…

在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境

目录 在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境一 Fyne 和 MSYS2简介1.1 Fyne1.2 MSYS2 二 安装 MSYS22.1 下载MSYS22.2 安装2.3 环境变量设置2.4 检测安装环境 三 参考文档 在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发…