数据结构-邻接链表
介绍
邻接矩阵是运用较多的一种储存图的方法,但如果一张网图边数较少,就会出现二维矩阵中大部分数据为0的情况,浪费储存空间
为了避免空间浪费,也可以采用数组与链表结合的方式来存储图
假设有这样一张图
我们可以先用一个数组来存储顶点;
在每个顶点后面,可以采用链式结构,来记录每个顶点与那些顶点相连,就好比一个车头后面跟着几节代表信息的车厢
如v1这个顶点,就可以采用如图的结构记录连接信息
这种存储了一个网图信息的链表集合就称为邻接链表
创建
结构体定义如下
#define MAX 100
//“车厢”部分
typedef struct edge{int adjvex;//邻接点域,用于储存该顶点对应下标int info;//储存权值struct edge* next;//链域,指向下一个邻接点
}edge;
//“车头”部分
typedef struct vex{char v;//储存顶点edge* first;//边表头指针
}vex,adjlist[MAX];
//储存邻接链表构成的网图信息
typedef struct{adjlist al;//顶点int numE,numN;//顶点数,边数
}graphAL;
邻接链表的创建
void creat(graphAL* g,int n,int e){//传入邻接链表,顶点数与边数g->numE=e;g->numN=n;for (int i=0;i<n;i++){cin>>g->al[i].v;//传入顶点g->al[i].first=NULL;//每一个顶点的边表初始化为空}for (int i=0;i<e;i++){//建立边表int v1,v2;cin>>v1>>v2;//头插法进行插入edge* temp1=(edge*)malloc(sizeof(edge));temp1->adjvex=v2;temp1->next=g->al[v1].first;g->al[v1].first=temp1;//无向网图需要两个顶点都记录连接信息edge* temp2=(edge*)malloc(sizeof(edge));temp2->adjvex=v1;temp2->next=g->al[v2].first;g->al[v2].first=temp2;}
}
遍历
与邻接矩阵相似,遍历方式也是主要有BFS与DFS两种
DFS遍历法
void dfs(graphAL g,int i){edge* temp3=g.al[i].first;//记录头结点book[i]=false;//标记已经遍历过的节点while(temp3){if (book[temp3->adjvex]) dfs(g,temp3->adjvex);temp3=temp3->next;//继续遍历}
}
需要用到标记数组
bool book[MAX];
for (int i=0;i<g.numN;i++){book[i]=true;
}
for (int i=0;i<g.numN;i++){if (book[i]) dfs(g,l);
}
BFS遍历法
void bfs(graphAL g){for (int i=0;i<g.numN;i++){book[i]=true;}deque <int>q;for (int i=0;i<g.numN;i++){if (book[i]){book[i]=false;q.push_back(i);//将顶点入队while(!q.empty()){int t=q.front();q.pop_front();//将队首出队edge* temp4=g.al[t].first;while(temp4){//将与队首相连的入队if (book[temp4->adjvex]){book[temp4->adjvex]=false;q.push_back(temp4->adjvex);//将此顶点入队}temp4=temp4->next;//继续遍历}}}}
}
相关文章:

数据结构-邻接链表
介绍 邻接矩阵是运用较多的一种储存图的方法,但如果一张网图边数较少,就会出现二维矩阵中大部分数据为0的情况,浪费储存空间 为了避免空间浪费,也可以采用数组与链表结合的方式来存储图 假设有这样一张图 我们可以先用一个数组…...

十三、集合进阶——单列集合 及 数据结构
单列集合 及 数据结构 13.1 集合体系结构13.1.2 单列集合1. Collection2.Collection 的遍历方式迭代器遍历增强for遍历Lambda表达式遍历 3.List集合List集合的特有方法List集合的遍历方式五种遍历方式对比 4.数据结构1).栈2).队列3)数组4)链表小结5&…...

Android | ArcGIS入门
一、概述 ArcGIS是由Esri开发的地理信息系统(GIS)软件。它用于制图、空间分析和数据可视化。ArcGIS允许用户以各种格式创建、管理、分析和共享地理信息。它通常用于城市规划、环境管理和应急响应等领域。该软件包括一系列工具,用于创建地图、…...

dockerfile文件书写
1.dockerfile构建nginx镜像 1.1书写dockerfile文件 mkdir nginx #创建nginx目录 cd nginx vim dockerfile # 修改文件FROM centos # 基础镜像,默认最新的centos8操作系统 MAINTAINER xianchao # 指定镜像的作者信息 RUN rm -rf /etc/yum.repos.d/* # centos8默认…...
蓝桥杯-整数删除
给定一个长度为 N 的整数数列:A1, A2, ... , AN。你要重复以下操作 K 次: 每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除。 并把与它相邻的整数加上被删除的数值。 输出 K 次操作后…...

以程序员的视角,看前后端分离的是否必要?
Hello,我是贝格前端工场,本篇分享一个老生常谈的话题,前后端分离是必然趋势,但也是要区分具体的场景,欢迎探讨,关注,有前端开发需求可以私信我,上车了。 一、什么是前后端分离和不分…...

Linux:sed进阶(12)
Linux:shell脚本:基础使用(5)《正则表达式-sed工具》_linux脚本表达式s-CSDN博客https://blog.csdn.net/w14768855/article/details/132347574?ops_request_misc%257B%2522request%255Fid%2522%253A%252217084222871680019707523…...
Linux命令-builtin命令(执行bash内建命令)
说明 用于执行指定的bash内建命令。builtin 命令调用的bash内建命令优先于同名的外部命令及同名的shell函数。 语法 builtin [shell-builtin [arg ...]]参数 shell-builtin(可选):要调用的bash内建命令。 arg(可选)…...

HTML的特殊字符
HTML的特殊字符 有些特殊的字符在 html 文件中是不能直接表示的,例如: 空格,小于号(<),大于号(>),按位与(&)。 空格 示例代码: 运行结果: 由于html 标签就是用 < > 表示的࿰…...

内核移植学习
内核移植 内核移植就是指将RT-Thread内核在不同的芯片架构、不同的板卡上运行起来。 移植可分为CPU架构移植和BSP板级支持包移植两部分。 CPU架构移植 在嵌入式领域有多种不同CPU架构,例如Cortex-M、ARM920T、MIPS32、RISC-V等等。 为了使RT-Thread能够在不同C…...

Mysql 两个日期相减得到指定的格式数据
首先避坑: Mysql 中两个日期直接相减,若在同一天则得到的是秒,否则相减得到的并不是秒,一定要注意。 函数 TIMESTAMPDIFF(unit,begin,end); 函数返回 begin - end 的结果。 其中 begin 和 end 是 DATE 或 DATETIME 表达式。 …...

第六十四天 服务攻防-框架安全CVE复现Apache shiroApache Solr
第六十四天 服务攻防-框架安全&CVE复现Apache shiro&Apache Solr 知识点: 中间件及框架列表: IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic.JBoos,WebSphere, Jenkins,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Spring, Flask,jQuery等 1、开发框…...

JavaScript 设计模式之享元模式
享元 将一部分共用的方法提取出来作为公用的模块 const Car {getName: function () {return this.name},getPrice: function (price) {return price * 30} }const BMW function (name, price) {this.name namethis.price price } BMW.prototype Car const bmw new BMW(…...

利用故事推动企业变革:如何提升数据分析技能
单一的数据和表格尽管有算法的支撑,但在其表达方式上总会让人感到头疼。当我们需要深入了解企业的盈利能力,或是尝试评估业务的增长机会时,以往都会将精力全部放在分析数字、阅读信息、回顾历史和沟通交流之上,却忽略随之而生成的…...
Python内置函数04——enumerate
文章目录 概述语法实例展示 概述 在Python中,enumerate()是一个很常用的内置函数。它的作用是将一个可迭代对象(如列表、元组、字符串等)组合为一个索引序列和元素序列的枚举对象。 语法 enumerate(iterable, start0) 其中,ite…...

unity学习(28)——登录功能
有之前注册的知识,登录就很容易处理了。 登陆成功返回id: 登录失败返回null: 测试同一账号不能重复登陆!登录成功后最好可以跳到新的场景中 结果是好的,去服务器看一下对应部分的代码,可见,登…...
Mac公证脚本-Web公证方式
公证方式 Mac 公证方式有三种 公证方法 优点 缺点 阐述 Xcode Xcode携带的图形界面,使用方便 无法进行自动化公证 单个App应用上架使用较多 altool(旧版) 支持pkg,dmg,脚本自动化 2023/11/01 将会过期 已经…...

让你专注工作的思维模板,进入每天的专注生活
开启专注生活,打造高效氛围,踏上传奇之路。 如何专注工作? 阻止内部干扰阻止外部干扰结论 专注象限图如下:(幸福是一种不断增加难度的活动) A1是你开始做某事的时候。 A2是当任务变得过于简单的时候。 A3是…...

Java之获取Nginx代理之后的客户端IP
Java之获取Nginx代理之后的客户端IP Nginx代理接口之后,后台获取的IP地址都是127.0.0.1,解决办法是需要配置Nginx搭配后台获取的方法,获得设备的真实地址。我们想要获取的就是nginx代理日志中的这个IP nginx配置 首先在nginx代理的对应lo…...

【springboot+vue项目(十五)】基于Oauth2的SSO单点登录(二)vue-element-admin框架改造整合Oauth2.0
Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统框架,提供了丰富的组件和功能,可以帮助开发者快速搭建现代化的后台管理系统。 一、基本知识 (一)Vue-element-admin 的主要文件和目录 vue-element-admin/ |…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...