数据结构-图的存储

news2024/11/25 15:33:07

邻接矩阵法

image.png

#define MaxVertexNum 100	//顶点数目的最大值
typedef struct{
	char Vex[MaxVertexNum];	//顶点表
    int Edge[MaxVertexNum][MaxVertexNum];	//邻接矩阵,边表
    int vexnum,arcnum;	//图的当前顶点数和边数
}MGraph;

无向图
第i个顶点的度=第i行(或第i列)的非零元素个数
有向图
第i个结点的出度=第i行的非零元素个数
第i个结点的入度=第i列的非零元素个数
第i个结点的度=第i行、第i列的非零元素个数之和

邻接矩阵法求顶点的度/出度/入度的时间复杂度为O(|v|)

邻接矩阵法存储带权图(网)

image.png

#define MaxVertexNum 100	//顶点数目的最大值
#define INFINITY 最大的int//宏定义常量“无穷”
typedef char VertexType;	//顶点的数据类型
typedef int EdgeType;		//带权图中边上权值的数据类型
typedef struct{
    VertexType Vex[MaxVertexNum];	//顶点
    EdgeType Edge[MaxVertexNum][MaxVertexNum];	//边的权
    int vexnum,arcnum;	//图的当前顶点数和弧数
}MGraph;

空间复杂度:O(|V|的2次方)–只和顶点数相关,和实际的边数无关
适合用于存储稠密图
无向图的邻接矩阵是对称矩阵,可以压缩存储(只存储上三角区/下三角区)

邻接矩阵法的性质

image.png

邻接表法

邻接表法(顺序+链式存储)
image.png

//边
typedef struct ArcNode{
	int adjvex;
    struct ArcNode *next;
}ArcNode;
//顶点
typedef struct VNode{
	VertexType data;	//顶点信息
    ArcNode *first;		//第一条边
}VNode,AdjList[MaxVertexNum];
//用邻接表存储的图
typedef struct{
	AdjList vertices;
    int vexnum,arcnum;
}ALGraph; 
邻接表邻接矩阵
空间复杂度无向图O(|V|+2|E|);有向图O(|V|+|E|)O(|V|的2次方)
适合用于存储稀疏图存储稠密图
表示方式不唯一唯一
计算度/出度/入度计算有向图的度、入度不方便,其余很方便必须遍历对应行或列
找相邻的边找有向图的入边不方便,其余很方便必须遍历对应行或列

十字链表存储有向图

image.png
空间复杂度:O(|V|+|E|)
V:顶点个数 E:边条数
顺着绿色线路找指定顶点的所有出边
顺着橙色线路找指定顶点的所有入边
十字链表只用于存储有向图

邻接多重表存储无向图

image.png
空间复杂度:O(|V|+|E|)
删除边、删除节点等操作很方便
注意:邻接多重表只适用于存储无向图
image.png

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

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

相关文章

深入理解JVM虚拟机第二十二篇:详解JVM当中与操作数栈相关的字节码指令

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻J…

VUE页面导出PDF方案

1,技术方案为:html2canvas把页面生成canvas图片,再通过jspdf生成PDF文件; 2,安装依赖: npm i html2canvas -S npm i jspdf -S 3,封装导出pdf方法exportPdf.js: // 页面导出为pdf格式 //titl…

简单选择排序(c语言代码实现)

选择排序:简单选择排序(不稳定的排序) 简单选择排序是一种基础的排序算法,它的基本思路是在未排序的序列中选择最小(或最大)的元素,将其与序列的第一个元素进行交换,然后在剩余的未…

MySQL-基础篇

文章目录 第一章 MYSQL 概述数据库相关概念MySQL 数据库下载安装启动和停止 MySQL客户端连接解决:mysql 不是内部或外部命令,也不是可运行的程序或批处理文件。配置 Path 环境变量解决:net start mysql80 发生系统错误 5。 拒绝访问。MYSQL 的…

IntelliJ IDEA - Git Commit 后 Commit 窗口不消失解决方案

这个现象是在 2023 年版本后开始的,一开始以为是 Mac 系统的原因,后来发现原来 Windows 也这样,所以应该只跟 IDEA 版本有关 可以看到左侧 commit 后,这个侧边栏还在,按理讲在以前的版本是之前消失,这样使…

layui table合并相同的列

table.render({elem: #samples,url: /index/Develorderss/samplelists?od_idod_id //数据接口,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档layout: [prev, page, next, count,skip,limit]…

TCP发送窗口、接收窗口以及其工作原理

1*KvfIrP_Iwq40uVdRZYGnQg.png 上面的图表是从发送方的角度拍摄的快照。我们可以将数据分为4组: 1.已发送并已确认的字节(蓝色)2.已发送但尚未确认的字节(黄色)3.未发送但接收方准备好接收的字节(绿色&…

【C++】C++静态成员函数,类名直接调用

静态成员函数可以通过类名直接调用,不用创建对象。例如:ClassName::Func();通过类名直接调用因为不用创建对象所以不会运行类的构造方法。适合用于初始化。 参考: C【6】对静态成员函数的用法说明C调用成员函数的几种方法总结C static静态…

大数据毕业设计选题推荐-农作物观测站综合监控平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Linux 多线程编程详解

目录 为什么要使用多线程 线程概念 线程的标识 pthread_t 线程的创建 向线程传入参数 线程的退出与回收 线程主动退出 线程被动退出 线程资源回收(阻塞方式) 线程资源回收(非阻塞方式) 为什么要使用多线程 在编写代码时,是否会遇到以下的场景会感觉到难以…

LINUX入门篇【4】开发篇--开发工具vim的使用

前言: 从这一篇开始,我们将正式进入使用LINUX进行写程序和开发的阶段,可以说,由此开始,我们才开始真正去使用LINUX。 介绍工具: 1.LINUX软件包管理器yum: 1.yum的介绍: 在LINUX…

Swift--量值与基本数据类型

系列文章目录 第一章: Swift–量值与基本数据类型 文章目录 系列文章目录前言对学习过程做一个记录 变量和常量命名规范注释 元祖类型可选类型拆包 typealias 前言 对学习过程做一个记录 提示:以下是本篇文章正文内容,下面案例可供参考 变量和常量 …

十分钟理解回归测试(Regression Testing)

回归测试是一个系统的质量控制过程,用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响(比如你在家中安装了新的空调系统,发现虽然新的空调系统可以按预期工作,但是本来亮的等却不亮了&#…

Leetcode刷题【hot100】盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例…

单例模式 rust和java的实现

文章目录 单例模式介绍应用实例:优点使用场景 架构图JAVA 实现单例模式的几种实现方式 rust实现 rust代码仓库 单例模式 单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建…

uboot 和 内存地址

前言 在使用 uboot 升级的时候,有个疑问: 通过 tftp 下载的 bin 文件,我该暂存在哪段内存空间?换句话说,哪段内存空间可供我存放临时数据? 带着这个疑问,开启今天的 uboot 和 内存地址 研究之旅…

CSS特效004:hover图片,显示文字或附加层

css实战中,时常会碰见鼠标放在某个区块上,显示出一段文字或者其他附加信息。思路是利用position的层叠关系,将文字层放在图片的上面,display:none; hover的时候层 display:block。 效果图 源代码 /* * Author: 大剑师…

NR UE capability FeatureSetCombination的查看方法

下面是UEcapability中根据协议中的描述总结的NR CA和EN-DC组合的查看方法,主要内容在38.331/36.331中。比较关键的IE就是FeatureSetCombination。 FeatureSetCombination对应的是FeatureSet entries的二维矩阵。 每个FeatureSetsPerBand 包含适用于相关band combin…

伦敦金股票代码是什么?

伦敦金是跟踪实时的现货黄金价格走势的差价合约交易,它的代码一般是LLG、GOLD,但也有一些货币交易平台会显示为XAU。伦敦金不是股票交易,因此没有四位数或六位数的股票代码,但伦敦金交易品种单一,投资者不用在数千支股…

亚马逊云科技海外服务器初体验

目录 前言亚马逊云科技海外服务器概述注册使用流程实例创建性能表现用户体验服务支持初体验总结 前言 随着云原生技术的飞速发展,越来越多的企业和开发者选择云服务器来作为自己的使用工具,云原生技术的发展也促进了云服务厂商的产品发展,所…