当前位置: 首页 > news >正文

数据结构-邻接链表

介绍

邻接矩阵是运用较多的一种储存图的方法,但如果一张网图边数较少,就会出现二维矩阵中大部分数据为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;//继续遍历}}}}
}

相关文章:

数据结构-邻接链表

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

十三、集合进阶——单列集合 及 数据结构

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

Android | ArcGIS入门

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

dockerfile文件书写

1.dockerfile构建nginx镜像 1.1书写dockerfile文件 mkdir nginx #创建nginx目录 cd nginx vim dockerfile # 修改文件FROM centos # 基础镜像&#xff0c;默认最新的centos8操作系统 MAINTAINER xianchao # 指定镜像的作者信息 RUN rm -rf /etc/yum.repos.d/* # centos8默认…...

蓝桥杯-整数删除

给定一个长度为 N 的整数数列&#xff1a;A1, A2, ... , AN。你要重复以下操作 K 次&#xff1a; 每次选择数列中最小的整数&#xff08;如果最小值不止一个&#xff0c;选择最靠前的&#xff09;&#xff0c;将其删除。 并把与它相邻的整数加上被删除的数值。 输出 K 次操作后…...

以程序员的视角,看前后端分离的是否必要?

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

Linux:sed进阶(12)

Linux&#xff1a;shell脚本&#xff1a;基础使用&#xff08;5&#xff09;《正则表达式-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&#xff08;可选&#xff09;&#xff1a;要调用的bash内建命令。 arg&#xff08;可选&#xff09…...

HTML的特殊字符

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

内核移植学习

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

Mysql 两个日期相减得到指定的格式数据

首先避坑&#xff1a; Mysql 中两个日期直接相减&#xff0c;若在同一天则得到的是秒&#xff0c;否则相减得到的并不是秒&#xff0c;一定要注意。 函数 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(…...

利用故事推动企业变革:如何提升数据分析技能

单一的数据和表格尽管有算法的支撑&#xff0c;但在其表达方式上总会让人感到头疼。当我们需要深入了解企业的盈利能力&#xff0c;或是尝试评估业务的增长机会时&#xff0c;以往都会将精力全部放在分析数字、阅读信息、回顾历史和沟通交流之上&#xff0c;却忽略随之而生成的…...

Python内置函数04——enumerate

文章目录 概述语法实例展示 概述 在Python中&#xff0c;enumerate()是一个很常用的内置函数。它的作用是将一个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;组合为一个索引序列和元素序列的枚举对象。 语法 enumerate(iterable, start0) 其中&#xff0c;ite…...

unity学习(28)——登录功能

有之前注册的知识&#xff0c;登录就很容易处理了。 登陆成功返回id&#xff1a; 登录失败返回null&#xff1a; 测试同一账号不能重复登陆&#xff01;登录成功后最好可以跳到新的场景中 结果是好的&#xff0c;去服务器看一下对应部分的代码&#xff0c;可见&#xff0c;登…...

Mac公证脚本-Web公证方式

公证方式 Mac 公证方式有三种 公证方法 优点 缺点 阐述 Xcode Xcode携带的图形界面&#xff0c;使用方便 无法进行自动化公证 单个App应用上架使用较多 altool&#xff08;旧版&#xff09; 支持pkg&#xff0c;dmg&#xff0c;脚本自动化 2023/11/01 将会过期 已经…...

让你专注工作的思维模板,进入每天的专注生活

开启专注生活&#xff0c;打造高效氛围&#xff0c;踏上传奇之路。 如何专注工作&#xff1f; 阻止内部干扰阻止外部干扰结论 专注象限图如下&#xff1a;&#xff08;幸福是一种不断增加难度的活动&#xff09; A1是你开始做某事的时候。 A2是当任务变得过于简单的时候。 A3是…...

Java之获取Nginx代理之后的客户端IP

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

【springboot+vue项目(十五)】基于Oauth2的SSO单点登录(二)vue-element-admin框架改造整合Oauth2.0

Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统框架&#xff0c;提供了丰富的组件和功能&#xff0c;可以帮助开发者快速搭建现代化的后台管理系统。 一、基本知识 &#xff08;一&#xff09;Vue-element-admin 的主要文件和目录 vue-element-admin/ |…...

Qwen3-14B二次开发入门:基于内置Transformers接口扩展自定义功能

Qwen3-14B二次开发入门&#xff1a;基于内置Transformers接口扩展自定义功能 1. 为什么需要二次开发Qwen3-14B Qwen3-14B作为通义千问系列的最新大语言模型&#xff0c;在通用任务上表现出色。但在实际业务场景中&#xff0c;我们往往需要针对特定需求进行功能扩展。比如&…...

Qwen-Image-2512-SDNQ开源大模型:SVR低秩微调技术落地解析

Qwen-Image-2512-SDNQ开源大模型&#xff1a;SVR低秩微调技术落地解析 1. 引言 你有没有遇到过这样的烦恼&#xff1f;想用AI生成一张图片&#xff0c;要么得自己折腾复杂的模型部署&#xff0c;要么得忍受在线服务漫长的排队和模糊的画质。特别是对于开发者来说&#xff0c;…...

CSS 网格容器:全面解析与最佳实践

CSS 网格容器:全面解析与最佳实践 引言 CSS 网格布局(CSS Grid Layout)是 CSS3 中的一项重要特性,它允许开发者以更加灵活和高效的方式对页面布局进行设计。相较于传统的布局方式,CSS 网格布局提供了更为丰富的布局选项和更好的兼容性。本文将全面解析 CSS 网格容器,并…...

ChatGPT AI生成式引擎优化*(GEO)方案

ChatGPT AI生成式引擎优化*&#xff08;GEO&#xff09;方案&#xff1a; 技术支持&#xff1a;拓世网络技术开发工作室 1️⃣ 战略规划阶段 目标明确 内容类型 文本&#xff1a;文章、产品描述、文案、技术文档 图像&#xff1a;营销图片、社交媒体图、设计草图 视频/动画&…...

MouseOverShapeBox

MouseOverShapeBox MouseOverShapeBox 源码详解 - 鼠标悬停高亮标注框 这是一个增强版图像标注控件&#xff0c;当鼠标移动到形状上时&#xff0c;会高亮显示该形状。类似于图片标注工具中鼠标悬停时边框变色的效果。&#x1f4c4; 文件头部&#xff08;版权信息&#xff09; /…...

别再死记硬背了!用PyTorch代码逐行拆解Transformer中的QKV矩阵计算

用PyTorch代码逐行拆解Transformer中的QKV矩阵计算 在自然语言处理领域&#xff0c;Transformer架构已经成为事实上的标准。但很多开发者发现&#xff0c;仅通过理论图示理解其核心的注意力机制仍然存在困难。本文将带你用PyTorch代码从零开始实现QKV矩阵的计算过程&#xff0c…...

Qwen3-0.6B入门实战:从镜像启动到智能问答,完整流程解析

Qwen3-0.6B入门实战&#xff1a;从镜像启动到智能问答&#xff0c;完整流程解析 1. Qwen3-0.6B简介 Qwen3&#xff08;千问3&#xff09;是阿里巴巴集团开源的新一代通义千问大语言模型系列&#xff0c;涵盖6款密集模型和2款混合专家&#xff08;MoE&#xff09;架构模型。Qw…...

终极gsudo扩展功能开发指南:5个自定义插件与模块开发技巧

终极gsudo扩展功能开发指南&#xff1a;5个自定义插件与模块开发技巧 【免费下载链接】gsudo Sudo for Windows 项目地址: https://gitcode.com/gh_mirrors/gs/gsudo gsudo是Windows系统上的命令行权限提升工具&#xff0c;为开发者提供了类似Unix系统中sudo命令的功能。…...

飞机喷涂废气治理厂家丨一场看不见的“废气治理战”如何打响?

你有没有注意过&#xff0c;当你透过舷窗望向停机坪时&#xff0c;那些静静停靠的飞机&#xff0c;机身光洁如镜&#xff0c;涂装色彩鲜明&#xff1f;一架飞机交付使用&#xff0c;到每隔数年的定期大修&#xff0c;飞机都需要经历复杂的喷涂过程。这层看似简单的“外衣”&…...

StreamIO:Arduino嵌入式统一I/O流与缓冲区抽象库

1. StreamIO 库概述StreamIO 是一个面向嵌入式 Arduino 生态的轻量级 I/O 抽象封装库&#xff0c;其核心设计目标是统一处理流式数据&#xff08;Stream&#xff09;与静态内存缓冲区&#xff08;array buffer&#xff09;的读写操作。在传统 Arduino 开发中&#xff0c;开发者…...