【邻接表,图的邻接表存储表示】

文章目录

  • 邻接表
    • 无向图
    • 有向图
    • 图的邻接表存储表示:
    • 图的邻接表的弧(边)的结点结构

邻接矩阵的好处:
1.直观,简单,好理解。
2.方便检查任意一对顶点间是否存在边
3.方便找到任一顶点的所有“邻接点”(有边直接相连的顶点)。
4.方便计算任一顶点的“度”
- 无向图:对应行(列)非0元素的个数。
- 有向图:对应行非0元素的个数“出度”。
对应列的非0元素个数为“入度”。
邻接矩阵的缺点:
1.不便于增加和删除顶点。
2.浪费空间----存稀疏图(点很多而边很少)有大量无效元素。
但对稠密图(特别是完全图)还是很合算的。
3.浪费时间----统计稀疏图中一共有多少条边。

邻接表

无向图

1.邻接表表示法(链式)
在这里插入图片描述
在这里插入图片描述
头结点存储的是邻接点的序号和下一个顶点的地址域。
在这里插入图片描述
这里的adjvex是邻接点域:存放与vi邻接的顶点在表头数组中的位置。
nextarc:链域:指示下一条边或弧。
后面还可以加一个存储空间info:存储当前的权值。

  • 顶点:
    • 按编号顺序将顶点数据存储在一位数组中;
  • 关联同一顶点的边(以顶点为尾的弧):
    • 用线性链表存储。

邻接表的特点:

  • 邻接表不唯一。
  • 若无向图中有n个顶点,e条边,则其邻接表需n个头结点和2e个表结点。适宜存储稀疏图。
  • 无向图中顶点vi的度为第i个单链表中的结点数。

有向图

在这里插入图片描述
在这里插入图片描述

有向图只记录以v1为出度的顶点。
特点:

  • 顶点vi的出度为第i个单链表中的结点数。
  • 顶点vi的入度为整个单链表中邻接点域值是i-1的结点个数。
  • 找出度易,找入度难。
    在这里插入图片描述
    例:已知某网的邻接(出边)表,请画出该网络。
    在这里插入图片描述
    当邻接表的存储结构形成后,图便唯一确定。
    在这里插入图片描述

图的邻接表存储表示:

typedef struct VNode {
	VerTexType data;//顶点信息
	ArcNode* firstarc;//指向第一条依附于顶点的边的指针
}VNode,AdjList[MVNum];//AdjList表示邻接表的类型

AdjList v:就是v里面的每一个变量都有数据和指针的两个部分; 相当于 VNode v[MVNum];

图的邻接表的弧(边)的结点结构

在这里插入图片描述


typedef struct ArcNode {//边结点
	int adjvex;//该边所指向的顶点的位置
	struct ArcNode* nextarc;//指向下一条边的指针
	OtherInfo info;//和边相关的信息
}ArcNode;

图的结构定义:

typedef struct {
	AdjList vertices;//邻接表类型的数组,存储着所有的结点
	int vexnum, arcnum;//图的所有顶点和边(弧)
}ALGraph;

在这里插入图片描述

ALGraph G{};//定义了邻接表示的图G
	G.vexnum = 5;
	G.arcnum = 5;//定义了5个顶点,5条边
	G.vertices[1].data = 'b';//图G的第二个顶点是b
	p = G.vertices[1].firstarc;//指针p指向顶点b的第一条边的结点
	p->adjvex = 4;//p指针所指结点是到下标为4的结点的边

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思考如何完成一个审批流

思考如何完成一个审批流 这篇文章,可能没有太多的干货,只是对于自己做过项目的一个反思与整理,同时,让这篇文章暴露在公共视野,虚心接受批评指导,向各位前辈同仁进行学习。 如果此文又不当之处,…

MIB 操作系统Lab: Xv6 and Unix utilities(1)boot xv6

从github中下载xv6代码 $ git clone git://g.csail.mit.edu/xv6-labs-2023 $ cd xv6-labs-2023 编译和运行xv6: $ make qemu 如果在终端输入ls命令,能看到输出。 大多数都是可以直接运行的命令。 xv6没有ps命令,但是可以输入ctrl-p可以看到进程的信…

【C语言】动态内存管理

简单不先于复杂,而是在复杂之后 文章目录 1. 为什么存在动态内存分配2. 动态内存函数的介绍2.1 [malloc ](http://www.cplusplus.com/reference/cstdlib/malloc/?kwmalloc)和 [free](https://cplusplus.com/reference/cstdlib/free/)2.2 [calloc](https://cplusplu…

历年国自然标书申请 面上项目614份 2001-2019年 面上标书

这里列举几例 清华任丰原 哈尔滨 杨宝峰 # 关注微信:生信小博士,10元领取 关注微信之后, 点开付费合集即可领取

C51--WiFi模块ESP8266--AT指令

ESP8266 面向物联网应用的,高性价比、高度集成的WiFi MCU 简介: 高度集成: ESP8266EX集成了32位Tensilica 处理器、标准数字外设接口、天线开关、射频balun、功率放大器、底噪放大器、过滤器和电源管理模块,可将所占的PCB空间降…

Jetson orin nano配置深度学习环境

Jetson orin nano是一块比较新的板子,装的是Ubuntu20.04系统,与普通x86_64不同,它是ARM64平台,网上的教程不是很多。 一、Jeston Orin Nano介绍 2022年GTC,NVIDIA 宣布Jetson Orin Nano系列系统模块(SoM&a…

【教3妹学编程-算法题】最大化数组末位元素的最少操作次数

3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包” 2哥 :3妹,什么事呀这么开发。 3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。 2哥&#x…

SpringMVC调用流程

SpringMVC的调用流程 SpringMVC涉及组件理解: DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ] HandlerMapping : SpringMVC提供&…

yolo改进替换VanillaNet backbone

论文地址:https://arxiv.org/pdf/2305.12972.pdf 代码地址:GitHub - huawei-noah/VanillaNet VanillaNet简介 基础模型的核心是“更多不同”的哲学,计算机视觉和自然语言处理的惊人成功就是例证。 然而,优化的挑战和Transformer模…

pycharm2023关闭项目后一直显示正在关闭项目-解决办法

网上的很多教程都试了不行,直接用下面的方法有效解决。 点击 帮助--查找操作--输入Registry--点注册表,取消ide.await.scope.completion后的勾选即可。

rabbitMQ的扇出模式(fanout发布订阅)的生产者与消费者使用案例

扇出模式 fanout 发布订阅模式 生产者 生产者发送消息到交换机(logs),控制台输入消息作为生产者的消息发送 package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel;import java.util.Scanne…

面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)

欢迎关注威♥“电击小子程高兴的MATLAB小屋”获取更多资料 该程序复现《面向配电网韧性提升的移动储能预布局与动态调度策略》,具体摘要内容见下图,程序主要分为两大模块,第一部分是灾前预防代码,该部分采用两阶段优化算法&#…

持久化存储

RDB(速度快,实时性差,恢复i/o影响性能) RDB:快照文件*.rdb,redis database简写 redis6.016一下快照默认配置 ################################ SNAPSHOTTING ################################ # # Save…

Spring Boot 项目部署方案!打包 + Shell 脚本部署详解

文章目录 概要一 、profiles指定不同环境的配置二、maven-assembly-plugin打发布压缩包三、 分享shenniu_publish.sh程序启动工具四、linux上使用shenniu_publish.sh启动程序 概要 本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程…

GitHub加速配置

1. 找到要加速的域名 GitHub:github.com(这只是加载主页面的)GitHub下载:codeload.github.com(不唯一,自己去下载链接看) 2. 用域名到DNS解析服务器地址 ITDOG 3. 修改 Hosts 文件 依据解…

卷积神经网络(CNN)mnist手写数字分类识别的实现

文章目录 前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)我的环境: 2. 导入数据3.归一化4.可视化5.调整图片格式 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、知识点详解1. MNIST手写数字数据集介绍2. 神经网络程序说明3. 网…

python接口自动化-参数关联

前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 (博客园的登录机制已经变了,不能用账号和密…

静态共享代理和静态独享有哪些区别?怎么选择?

在软件开发中,静态共享代理(Static Proxy)和静态独享(Monostatic)是两种常见的软件设计模式。这两种模式在实现方式、使用场景以及优缺点上存在一定的差异,下面将详细介绍它们的区别以及如何进行选择。 一、…

Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析

植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于…