嵌入式学习第三十天!(单向链表练习)
1. 单向链表的逆序:
int Is_Empty_Link(LINK_LIST *plist)
{return plist->phead == NULL;
}void Reverse_Link(LINK_LIST *plist)
{LINK_NODE *ptmp = plist->phead;LINK_NODE *pinsert = NULL;plist->phead = NULL;if(Is_Empty_Link(plist)){return;}else{while(ptmp != NULL){pinsert = ptmp;ptmp = ptmp->pnext;pinsert->pnext = plist->phead;plist->phead = pinsert;}}return;
}
在这里的逆序,利用了头插法的思想,因为利用头插法插入数据,数据是逆序插入的,最后插入的数据在最前面,最先插入的数据在最后面,那么逆序也可以使用这个思想。
2. 找到单向链表中的中间结点
LINK_NODE *Find_Center_Link(LINK_LIST *plist)
{LINK_NODE *pfast = plist->phead;LINK_NODE *pslow = plist->phead;while(pfast != NULL){pfast = pfast->pnext;if(pfast == NULL){break;}pfast = pfast->pnext;pslow = pslow->pnext;}return pslow;
}
采用链表中比较常用的快慢指针法,那么快指针每次走两步,慢指针每次走一步,当快指针走到等于NULL的时候,慢指针刚好走到了中间结点,但是在这个地方,如果遇到偶数个结点的单向链表,那么得到的中间结点为中间的后一个结点。如果想要中间结点的前一个结点的话,那么需要修改一下判断条件:
LINK_NODE *Find_Center_Link(LINK_LIST *plist)
{LINK_NODE *pfast = plist->phead;LINK_NODE *pslow = plist->phead;while(1){pfast = pfast->pnext;if(pfast == NULL){break;}pfast = pfast->pnext;if(pfast == NULL){break;}pslow = pslow->pnext;}return pslow;
}
3. 找到单向链表的倒数第K个结点
LINK_NODE *Find_Last_K_Node(LINK_LIST *plist, int K)
{LINK_NODE *pfast = plist->phead;LINK_NODE *pslow = plist->phead;for(int i = 0; i < K; i++){if(pfast == NULL){return NULL;}pfast = pfast->pnext;}while(pfast != NULL){pfast = pfast->pnext;pslow = pslow->pnext;}return pslow;
}
同样可以使用快慢指针法的思想,让快指针先走K步,然后再让快指针和慢指针同时一起走,当快指针走到等于NULL的时候,那么慢指针刚好比慢指针少K步,也就是倒数第K个结点
4. 删除单向链表的某个结点
int Delete_Link_Node(LINK_LIST *plist, DATA_TYPE data)
{if(Is_Empty_Link(plist)){return 0;}LINK_NODE *pfree = plist->phead;LINK_NODE *ppre = NULL;int del_cnt = 0;while(pfree != NULL){if(pfree->data == data){if(pfree == plist->phead){plist->phead = pfree->pnext;free(pfree);pfree = plist->phead;}else{ppre->pnext = pfree->pnext;free(pfree);pfree = ppre->pnext;}plist->curlen--;del_cnt++;}else{ppre = pfree;pfree = pfree->pnext;}}return del_cnt;
}
可以发现这段代码可以将所有数据为data的链表结点都删除了,如果只想删除第一个的话,那就在找到第一个数据为data的结点以后,将结点free掉,然后直接return,那么程序就实现了只删除第一个。
5. 实现单向链表的升序排序(插入排序的思想)
int Insert_Sort_Link(LINK_LIST *plist)
{LINK_NODE *pinsert = NULL;LINK_NODE *ptmp = plist->phead;plist->phead->pnext = NULL;while(ptmp != NULL){pinsert = ptmp;ptmp = ptmp->pnext;if(pinsert->data <= plist->phead->data){pinsert->pnext = plist->phead;plist->phead = pinsert;}else{ LINK_NODE *perg = plist->phead;while(perg->pnext != NULL && pinsert->data >= perg->pnext->data){perg = perg->pnext;}pinsert->pnext = perg->pnext;perg->pnext = pinsert;}}return 0;
}
相关文章:
嵌入式学习第三十天!(单向链表练习)
1. 单向链表的逆序: int Is_Empty_Link(LINK_LIST *plist) {return plist->phead NULL; }void Reverse_Link(LINK_LIST *plist) {LINK_NODE *ptmp plist->phead;LINK_NODE *pinsert NULL;plist->phead NULL;if(Is_Empty_Link(plist)){return;}else{wh…...
Linux:rpm部署Jenkins(1)
1.获取Jenkins安装包 我这里使用的是centos7系统,ip为:192.168.6.6 2G运存 连接外网 Jenkins需要java环境,java的jdk包你可以去网上下载离线包,或者直接去yum安装,我这里使用的是yum安装 再去获取Jenkins的rpm包…...
新能源汽车充电桩站点烟火AI识别检测算法应用方案
新能源汽车作为现代科技与环保理念的完美结合,其普及和应用本应带给人们更加便捷和绿色的出行体验。然而,近年来新能源汽车充电火灾事故的频发,无疑给这一领域投下了巨大的阴影。这不禁让人深思,为何这一先进的交通工具在充电过程…...
Macbook安装Go以及镜像设置
Macbook安装Go 文章概要:本文主要介绍了在MacOS上安装Go的步骤 本文内容来自:谷流仓AI - ai.guliucang.com 有两种方式安装go: 通过homebrew安装通过Go官网直接下载安装文件安装 1. 通过homebrew安装 brew update && brew install…...
群晖NAS安装Video Station结合内网穿透实现公网访问本地影音文件
文章目录 1.使用环境要求:2.下载群晖videostation:3.公网访问本地群晖videostation中的电影:4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端(搭载安卓,ios,ipados等系统的设备…...
GitHub加速访问最简单的方法
Github是全球最大的代码开源平台,对于编程的小伙伴来说,这是一个巨大的宝库,也是编程学习的圣地。很对小伙伴在使用GitHub时会经常出现无法访问Github的情况。 一、解决方法——>修改hosts文件 通过 IP查询工具来获取当前Github网站的真实…...
MySQL数据库索引介绍
前言 在数据库中创建索引可以提高数据检索的速度和效率。索引是一种数据结构,类似于书籍的目录,它可以帮助数据库系统快速定位和访问表中的特定数据行。 目录 一、索引相关介绍 1. 概述 2. 作用 3. 副作用 4. 创建原则依据 二、索引的分类与管理…...
中间件学习--InfluxDB部署(docker)及springboot代码集成实例
一、需要了解的概念 1、时序数据 时序数据是以时间为维度的一组数据。如温度随着时间变化趋势图,CPU随着时间的使用占比图等等。通常使用曲线图、柱状图等形式去展现时序数据,也就是我们常常听到的“数据可视化”。 2、时序数据库 非关系型数据库&#…...
Go第三方框架--gin框架(一)
序言 Gin框架作为go语言使用最多的web框架,以其快速的响应速度和对复杂http路由配置的支持受到程序员和媛们的喜爱,几乎统治了web市场。但作为一名合格的程序员,要知其然更要知其所以然,不然八股文背的也没有啥意思。本着这个原则…...
网络安全——笔记
XSS:跨站脚本(Cross-site scripting) XSS 全称“跨站脚本”,是注入攻击的一种。其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有 JavaScript 的内容文…...
Maven pom.xml配置详解
pom.xml是什么? pom.xml(项目对象模型-Project Object Model的缩写)是Maven项目的核心配置文件,用于管理项目的依赖、插件、构建配置等。 举例说明:以阿里巴巴的fastjson为例: <?xml version"1.…...
2024深圳国际电线电缆及电源产品展览会
2024深圳国际电线电缆及电源产品展览会 2024 Shenzhen International Coupling, Clutch and Brake Exhibition 时间:2024年08月28-30日 地点:深圳国际会展中心(新馆) 预订以上展会详询陆先生 I38(前三位ÿ…...
如何成功将自己开发的APP上架到应用商店
随着移动应用市场的蓬勃发展,开发一款优秀的APP已成为许多企业和个人的首要选择。然而,成功上架并有效推广APP至关重要。本文将逐步介绍完整的上架流程,包括准备所需材料、注册开发者账户、进行APP备案、提交审核以及上架成功后的推广和维护。…...
Jetson AGX ORIN 配置 FGVC-PIM 神经网络(包含 arm64 下面 torch 和 torchvision 配置内容)
Jetson AGX ORIN 配置 FGVC-PIM 神经网络 文章目录 Jetson AGX ORIN 配置 FGVC-PIM 神经网络配置 ORIN 环境创建 FGVC-PIM 虚拟环境安装 PyTorch安装 torchvision安装其他依赖包 配置 ORIN 环境 首先先配置 ORIN 的环境,可以参考这个链接: Jetson AGX …...
mybatisplus和mybatis兼容问题
Invalid bound statement (not found) 错误 原xml配置 <bean id"sqlSessionFactory" class"org.mybatis.spring.SqlSessionFactoryBean"><property name"mapperLocations" value"classpath:/META-INF/mapper/*.xml"/>&l…...
nodejs安装使用React
1、react安装 首先,确保电脑上具备nodejs环境,之后用 winr 呼出控制台,输入 cmd 命令弹出cmd控制台(小黑框)之后在默认路径输入如下代码 npm i -g create-react-app //全局安装react环境无需选择特定文件夹安装成功后…...
防御性编程,可能是导致被裁员的更大的原因,别被误导了
裁员与反裁员是当前IT界一个经典的话题,作为打工者的猿人常常讨论了N多的防御性编程,代码不可读、代码不好改、代码深度嵌套、代码留bug等等。 其实防御性编程只会让决策者加速解耦你与业务系统: 1、增加代码走查的环节(增加成本…...
Unity与鼠标相关的事件(自己记忆用)
1. OnMouseDown:当用户按下鼠标按钮时调用。 - 参数:MouseEvent,可以用来确定哪个鼠标按钮被按下。 2. OnMouseUp:当用户释放鼠标按钮时调用。 - 参数:MouseEvent,可以用来确定哪个鼠标按钮被释放。…...
模型权重下载方法
下载方法1:git lfs下载 1、在hf-mirror.com中搜索模型,如搜索text2vec-large-chinese, 点击模型进入页面:https://hf-mirror.com/GanymedeNil/text2vec-large-chinese/tree/main 2、git lfs install 3、git clone https://hf-mir…...
JS基础之 数据浅拷贝与深拷贝
一、拷贝背景 JS引用数据类型有两类:基本数据类型和引用数据类型; 基本类型:String,Number,Boolean,Null,Undefined,symbol这6种基本数据类型它们是直接按值存放的,所以…...
茅台智能预约系统:5分钟搭建你的自动抢购助手
茅台智能预约系统:5分钟搭建你的自动抢购助手 【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法) 项目地址: https://gitcode.…...
独立开发者如何利用 Taotoken 以更低成本实验多种大模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用 Taotoken 以更低成本实验多种大模型 对于预算有限的独立开发者或小型工作室而言,在项目中引入大模…...
【数据分析】智慧城市温度与湿度分析系统【含Matlab源码 15555期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
Windows 10/11 上从零搞定 OpenCDA 自动驾驶仿真环境:CARLA 0.9.14 + PyTorch + SUMO 保姆级配置流程
Windows 10/11 上从零搞定 OpenCDA 自动驾驶仿真环境:CARLA 0.9.14 PyTorch SUMO 保姆级配置流程自动驾驶仿真技术正在成为行业研究和开发的重要工具。对于刚接触这一领域的开发者来说,搭建一个完整的仿真环境往往是第一个挑战。本文将带你一步步在Win…...
【Gemini代码生成能力权威评测】:基于2000+真实编码场景的7大维度深度拆解
更多请点击: https://codechina.net 第一章:Gemini代码生成能力评测总览 Google Gemini 系列模型(尤其是 Gemini 1.5 Pro)在多模态理解与代码生成任务中展现出显著的上下文建模能力。本章聚焦其在真实编程场景中的代码生成质量、…...
Real-ESRGAN-GUI完整教程:如何免费使用AI图像增强工具实现高清修复
Real-ESRGAN-GUI完整教程:如何免费使用AI图像增强工具实现高清修复 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 你是否曾为模糊的老照片、低分辨率的网络图…...
使用curl命令直接测试Taotoken大模型API连通性与功能
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用curl命令直接测试Taotoken大模型API连通性与功能 在集成大模型能力时,开发者有时需要在没有安装特定语言SDK的环境…...
昇腾CANN torchtitan-npu 3D 并行实战:DP+TP+PP 组合策略与 Pipeline Bubble 消除
175B 参数的大模型不能放在一张 NPU 上——需要分布式。三种并行策略各有优劣:数据并行(DP)简单但显存不降、张量并行(TP)通信密集但显存降得最多、流水线并行(PP)显存也降但有 bubbleÿ…...
基于双机器学习的大规模因果推断:从理论到Spark工程实践
1. 项目概述:从观察到决策,量化客户行为的真实价值在数据驱动的商业决策中,我们常常面临一个核心挑战:如何区分“相关性”与“因果关系”?例如,我们观察到购买了高级会员的客户,其后续消费显著高…...
2000-2025年地市级数字技术创新水平
数字技术创新水平是衡量地级及以上城市在政府工作报告中系统提及数字技术相关词汇密度的综合指标,用以反映该地区数字技术创新活动的活跃程度与发展态势。本数据集基于全国地级及以上城市的政府工作报告文本构建,覆盖各年度、各城市的官方政策表述。核心…...
