图的存储结构

图的存储结构及遍历 实验项目名称:图的存储结构及遍历 实验目的及要求: 实验目的 (1)理解图的存储结构的表示和运算的C语言实现。 (2)掌握图的创建及深度遍历。 要求: (1)设计图的存储结构(边的信息用邻接矩阵存储); (2)数据元素为字符类型; (3)在实现图的创建及深度遍历。 实验原理:图结构是研究数据元素之间的多对多的关系。在这种结构中,任意两个元素之间可能存在关系。即结点之间的关系可以是任意的,图中任意元素之间都可能相关。 图的邻接矩阵表示法(Adjacency Matrix)也称作数组表示法,采用两个数组来表示图 阅读详情

图不可能用简单的顺序存储结构表示
在这里插入图片描述
一.邻接矩阵
在这里插入图片描述
1.无向图
基本思想:用一维数组存储图的顶点,用矩阵 n*n(二维数组)表示图中各顶点之间的邻接关系。有边指向顶点就用1表示,没有就用0

该矩阵是对称矩阵,因为是无向图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.有向图
在这里插入图片描述
出度对应行 入度对应列
在这里插入图片描述
3.网
在这里插入图片描述
4.建立无向网图的邻接矩阵代码实现

typedef char VertexType;
typedef int EdgeType;   
#define MAXVEX 100      
#define INFINITY 65535 //用65535来表示无穷

typedef struct MGraph{
	VertexType vexs[MAXVEX];      //顶点表 
	EdgeType arc[MAXVEX][MAXVEX]; //邻接矩阵 可看作边表 
	int numVertexes, numEdges;
}MGraph;

//建立无向网图
void CreateMGraph(MGraph *G)
{
	int i, j, k, w;
	printf("输入顶点数和边数:\n");
	scanf("%d%d", &G -> numVertexes, &G -> numEdges);
	for(i = 0; i < G -> numVertexes; i++) //建立顶点表 
	{
		scanf(&G -> vexs[i]);
	}
	for(i = 0; i < G -> numVertexes; i++)
	{
		for(j = 0; j < G -> numVertexes; j++)
		{
			G -> arc[i][j] = INFINITY;
		}
	}
	for(k = 0; k < G -> numEdges; k++)
	{
		printf("输入边(vi, vj)上的下标i, 下标j和权w:\n");
		scanf("%d%d%d", &i, &j, &w);
		G -> arc[i][j] = w;
		G -> arc[j][i] = G -> arc[i][j]; //无向图 矩阵对称 
	}
} 

二.邻接表
在这里插入图片描述
因而引出邻接表
1.概念
在这里插入图片描述
2.无向图
在这里插入图片描述
3.有向图
对于有向图 邻接表只能表示一个度 后面的十字链表会弥补这个不足
在这里插入图片描述
在这里插入图片描述
3.网
对于网 在数据域加上一个权值即可
在这里插入图片描述
4.代码实现
应用了在单链表创建中的头插法 对于无向图,一条边对应都是两个顶点,所以在循环中,一次就针对i和j分别进行了插入

//创建邻接表
typedef char VertexType;
typedef int EdgeType;

typedef struct EdgeNode{    //边表结点 
	int adjvex;            //存储顶点对应的下标 
	EdgeType weight;
	struct EdgeNode *next;
}EdgeNode; 

typedef struct VertexNode{ //顶点表结点 
	VertexType data;
	EdgeType *firstedge;
}VertexNode, AdjList[MAXVEX];

typedef struct GraphAdList{
	AdjList adjList;
	int numVertexes, numEdges;
}GraphAdjList;

void CreateALGraph(GraphAdjList *G)
{
	int i, j, k;
	EdgeNode *e;
	printf("输入顶点数和边数:\n");
	scanf("%d%d", &G -> numVertexes, &G -> numEdges);
	for(i = 0; i < G -> numVertexes; i++)
	{
		scanf(&G -> adjList[i].data);
		G -> adjList[i].firstedge = NULL; //将边表置为空表
		for(k = 0; k < G -> numEdges; k++)
		{
			printf("输入边(vi, vj)上的顶点序号:\n");
			scanf("%d%d", &i, &j);
			e = (EdgeNode*)malloc(sizeof(EdgeNode));
			e -> adjvex = j;
			e -> next = G -> adjList[i].firstedge;
			G -> adjList[i].firstedge = e;
			
			e = (EdgeNode*)malloc(sizeof(EdgeNode));
			e = adjvex = i;
			e -> next = G -> adjList[j].firstedge;
			G -> adjList[j].firstedge = e;  
			
		} 
	}
}

三.十字链表
在这里插入图片描述
在这里插入图片描述
四.邻接多重表
对于关注点在顶点,则邻接表是个不错的选择。但是关注边的操作,则需要找到这条边的两个边表结点进行操作,相对比较麻烦。
在这里插入图片描述
具体实现
在这里插入图片描述
五.边集数组
在这里插入图片描述

图的存储结构和算法—创建,输出,遍历(DFS,BFS),销毁 图的存储结构邻接矩阵存储邻接表存储三级目录 邻接矩阵存储 邻接表存储 三级目录 阅读详情

相关推荐

数据结构(图的存储结构)

图的存储结构 因为任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系(内存物理位置是线性的,图的元素关系是平面的)。 邻接矩阵(无向图) 考虑到图是由顶点和边或弧两部分组成,合在一起比较困难,那就很自然地考虑到分为两个结构来分别存储。 顶点因为不区分大小、主次,所以用一个一维数组来存储是狠不错的选择。 而边或弧由于是顶点与顶点之间的关系,一维数组肯定就搞不定...

sxdahh的博客 811

再谈图的存储方式(邻接矩阵,邻接表,前向星)

1.邻接矩阵 1.存图思想 使用一个矩阵来描述一个图,对于矩阵的第i行第j列的值,表示编号为i的顶点到编号为j的顶点的权值。 2.代码实现 // 最大顶点数 const int V = 1000; // 邻接矩阵的定义 // mat[i][j] 表示 顶点'i'到顶点'j'的权值 int mat[V][V]; // 邻接矩阵的初始化操作 // 假设权值为零表示没有该边 mems

Keaper的博客 1053

图解图的存储结构

刚开始接触图形结构的时候,觉得它很烧脑子,因为像线性表它仅有线性关系,树形结构有清晰度的层次结构,但是对于图形结构来说集合中的每一个元素都有可能有关系。所以在刚接触图形结构的时候,对于如何实现图形结构往往感到很困惑,后来发现我们其实只要弄清楚了图的存储结构那么用代码实现起来并不困难。要清楚地理解图的存储结构,首先要明白图的存储结构里要存储些什么东西。要存储图形结构的信息,无非就是存储图的顶点(vec

刘耀的博客 9803

图的存储结构你了解多少

图的存储结构 一.邻接矩阵 1.邻接矩阵表示法 2.邻接矩阵算法建立 二.邻接表 1.邻接表表示法 2.图的邻接表的建立 三.边学边练

智的博客 2334

图的存储结构-邻接矩阵

邻接矩阵 图的存储结构分为 邻接矩阵 和 邻接表, 本篇文章是有关通过邻接矩阵来实现图的存储, 邻接矩阵, 顾名思义, 即顶点之间的关系通过矩阵的形式表现出来, 矩阵的行坐标代表起始顶点的位置, 列坐标代表到达顶点的位置(无向图和无向网始末位置不讨论), 对于不带权的图或网而言, 矩阵中的值存放邻接标志, 如果起始顶点与到达顶点邻接, 则为 1, 否则为 0; 而对于带权图或网而言, 如果起始顶点...

Sock的博客 3004

【数据结构】图的存储结构:邻接矩阵

图的存储结构 由于图的任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序存储结构,但我们可以用二维数组(矩阵)来表示元素之间的关系——邻接矩阵。除此之外还有链式存储结构,包括邻接表、十字链表和邻接多重表。其中邻接矩阵和邻接表最常用。 邻接矩阵 邻接矩阵(Adjacency Matrix)是表示顶点之间相邻关系的矩阵,存储在二维数组中...

春雪阁 1842

数据结构之图论算法(一)图的存储结构及其构建算法

数据结构之图论算法(一)图的存储结构 构成图的基本要素: 顶点+边(弧) 邻接矩阵存储结构(数组表示法) 总:图(二维数组) = 顶点(顶点表) + 边(邻接矩阵,即二维数组本身) 设图为:A = (V,E),则 上面是无向图的情况。其邻接矩阵是对称的。 而有向图的邻接矩阵中,将列看为“出”,行看为“入”, 所以列上的顶点出,行上的顶点入,满足的才是1。因此,有向图不一定对称。 有向网络的邻接矩阵也是同理: 代码表示: #define INFINITY INT_MAX //最大值,表示无穷大 #def

huxxyyy的博客 2114

吃透 AM32 无人机电调:从源码架构到工作原理的全方位解析(附实践指南)(上)

本文深入解析了AM32电调固件的源码架构与核心模块实现。文章首先介绍了AM32电调作为开源无人机;动力心脏的重要地位,随后从硬件基础、源码目录、模块划分三个维度构建解析框架。重点剖析了系统初始化模块的时钟配置、GPIO初始化和定时器设置,以及FOC控制模块的坐标变换算法、角度估算和SVPWM生成等关键技术实现。通过逐行代码解析,揭示了电调如何将飞控指令转换为电机驱动的完整过程,为开发者理解AM32电调工作原理提供了系统性指导。

bother3000的博客 6568

6.2图的存储结构及基本操作

一、邻接矩阵法 顶点信息在数组中的存储会有一个固定的下标,他会与二维数组Edge相对应 已知对应的两顶点之间不存在边,可以用0或者无穷 图中指的是 从A到D如果长度为2,则路径只有1条 二、邻接表法 三、十字链表、邻接多重表 四、图的基本操作 对于邻接矩阵可以找到两点之间是否有边 邻接表最好情况是第一个指向的就是,最坏的情况是这个点有v-1条与之相连的边。 邻接矩阵删除一个顶点,加上一个bool进行判空,删除对应的行和列 邻接表:①最好情况:要删除的顶点原本

qq_43667537的博客 199

Apifox 自动化测试新增流程控制条件,复杂测试场景不再是问题

在 if 条件后的输入框填写请求接口得到的变量 viewed ,选择条件为「小于」,输入比较数值 10 ,并在 if 条件下添加「宠物下架处理」步骤。借助新增的自动化测试流程控制条件,测试人员就可以使用 Apifox 去实现更深层更多样的测试应用场景,帮助提升测试效率,减少复杂场景的测试操作。「查询新建宠物」、「修改宠物状态为已售出」和「查询宠物状态是否修改」步骤为当前在售宠物信息盘点的三个标准步骤,所以将这三个步骤合成一组。在循环中添加「查询在售宠物」和「修改宠物状态」步骤;

878

医疗影像技术实战:如何用Python快速生成DRR图像(附完整代码)

本文详细介绍了如何使用Python实现数字重建放射影像的快速生成。通过实战代码,从基础光线投射算法到性能优化,逐步讲解DRR图像生成的核心原理与工程实践,帮助开发者掌握医疗影像处理的关键技术,赋能放射治疗规划与图像引导手术等临床工具开发。

k8l9m0n的博客 72

图的存储结构——邻接矩阵

图的存储结构邻接矩阵表示法存储表示采用邻接矩阵表示法创建无向网用代码实现无向网 若有n个顶点,就是n*n的方阵,与边数无关 对称矩阵:从矩阵的左上角到右上角的主对角线为轴,右上角的元与左下角对应的元全都是相等的 邻接矩阵表示法 有向图、无向图的邻接矩阵表示法 如: 无向图 总结: 无向图的邻接矩阵是对称的; 顶点i的度=第i行(列)中1的个数; 特别的:完全图的邻接矩阵中,对角元素为0,其余为...

ker的博客 6159

DELL SC存储扩容避坑指南:6Gb vs 12Gb扩展柜混插的真相

本文深入解析DELL SC存储扩容中6Gb与12Gb扩展柜混插的核心规则与性能影响。文章指出,从SCOS 7.3版本起允许混插,但整个SAS环路速率将降至最低设备水平,尤其在12Gb控制器上接入6Gb扩展柜会严重拖累性能。指南提供了清晰的兼容性矩阵、实战操作流程及关键避坑清单,帮助管理员安全、高效地完成存储扩容。

weixin_28314575的博客 459

图的存储结构与实现总结-java版

目录 图的存储结构 邻接矩阵 邻接表 两者区别 图的java实现 顶点 边 图 测试 图的存储结构 图的存储结构主要分两种,一种是邻接矩阵,一种是邻接表。 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图...

今天吃了吗的博客 4246

Aspen Plus下载教程Aspen Plus V14 保姆级安装步骤(附安装包)

26、在WlmAdmin界面中,依次点击【Subnet Servers】、【admin】、【Add Feature】、【From a File】、【To Server and its File】。35、在产品选择页面,勾选需要安装的所有产品(重要:不要勾选【Aspen Online(Plant Data)】),然后点击【File Location】。回到桌面,点击任务栏的【开始菜单】,在【所有应用】中找到【Aspen Plus V14】软件图标,将其拖到桌面上创建快捷方式。9、这里可以更改软件的安装位置。

ps_xiaowang的博客 1万+

深入解析postcss-px-to-viewport-8-plugin:如何精准控制响应式转换范围

本文深入解析了postcss-px-to-viewport-8-plugin插件在响应式开发中的核心痛点——如何精准控制单位转换范围。针对插件默认全局转换的问题,文章提供了两种实战解决方案:通过编写巧妙的exclude正则表达式实现“曲线救国”,或直接修改插件源码补全include功能。同时,文章还分享了在Next.js、Vite等现代框架中的集成要点及常见问题排查方法,帮助开发者实现“外科手术式”的精准样式转换。

yoga7的博客 910

数据结构 之 图的存储结构(十)

图的存储结构,邻接表和邻接矩阵的概念和用法

J_admin的博客 779

abaqus 6.13安装(ubuntu 16.04LTS)

1。从iso将文件拷贝出来 2。chmod 777 -R ./* 给文件权限 3。sudo /home/xx/A/setup 4。安装licenseserver 5。拷贝lic,log文件 6。打开license sudo ./lmgrd -c path 7. 27011@xx or 27011@localhost ...

a1099313374的博客 1950

图的存储结构 && 图的遍历

①领接矩阵:顺序存储(一维数组存点的数据,二维数组存边的连接情况)(存储无向图、有向图)②邻接表:顺序+链式存储(顺序存点的数据,链存连接该点的边)(存储有向图、无向图)③十字链表:链式存储(存储有向图)④邻接多重表:链式存储(存储无向图)

一只小水豚 1170

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

图的存储结构——邻接表的实现

7.2 图的存储结构7.2.2 邻接表Adjacency List定义有向网邻接表的实现顶点结点类模板弧结点类模板有向网邻接表类模板无向图/有向图的邻接表效率对比邻接表和邻接矩阵的比较 7.2.2 邻接表Adjacency List 邻接表是邻接矩阵的改进。当图中的边数很少时,邻接矩阵中会出现大量的零元素,为了存储这些零元素,将耗费大量的存储空间。为此,可以把邻接矩阵的每一行改为一个单链表。 定义...

lseaJK的博客 3876

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

图的存储结构详解

408考研中“图”的知识点主要属于《数据结构》科目,是核心且常考的内容。

w_2345678的博客 304

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Hello Researcher Agent

You are a research assistant from the Hello World extension. ## Capabilities - Information analysis and summarization - Comparative research - Data-driven insights ## Guidelines - Provide clear, w

gitblog_00556的博客 437
上一篇: 图的定义
下一篇: 图的遍历
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值