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

数据结构--------单链表下

书接上回本章主要讲的是单链表的头删尾删指定位置插入删除链表的查找和链表的销毁一.链表的操作1.头删文字描述如下正所谓头删删除的肯定是链表的头元素但是我们要怎么样进行操作呢首先在删除之前我们肯定要断言一下传过来的链表的地址是不为空的以及链表也是不能为空的代码语言assertIpphead*pphead然后我们要头删删除的是头结点的元素我们在删除之前肯定是要定义一个next指针其数据类型应该是SLTNode*,next指针指向的头结点的下一个结点代码语言SLTNode* next (*pphead)-next;(注意这里的括号是不能省略的因为-操作符的优先级高于*)保存好之后我们就可以free(*pphead)这个头结点了再将next指针指向的结点成为新的头结点代码语言*ppheadnext画个图再熟悉一下这个代码这里存储数据数据1的结点为刚开始的头结点存储数据2的结点为头结点的next结点按照文字描述走一遍存储数据2的结点变为新的头结点存储数据3的结点变为next结点代码上述是分析多个结点接下来我们分析只存在一个结点的时候。同样我们画图分析上述的描述同样适用说到这里我们的头删就讲完了2.尾删文字描述同样的尾删删除的则是链表尾结点的数据同样的分成链表当中存在多个结点或者只有一个结点。同样的在进行操作之前我们还是要断言传过来的链表的地址是不为空的以及链表也是不能为空的代码语言assertIpphead*pphead接下来我们要找尾结点定义一个ptail指针起初它指向头结点以及一个prev指针指向空SLTNode* prevNULLSLTNode* ptail *pphead遍历这个ptail指针让他找尾当ptail找到尾的时候prev也找到ptail之前的结点先将prev的next指针置为空再将ptail指针free掉画图理解一下吧按照上述的文字描述即可实现尾删的操作了代码如下当链表中只有一个结点的时候我们就不能按照多个结点的方式来尾删了画图理解当只有一个结点的时候(*ppheadNULL)我们直接手动free(*pphead)之后再手动将*pphead置为空(*ppheadNULL)3.查找指定位置的结点文字描述首先我们创建一个pcur指针指向头结点SLTNode*pcur*pphead接下来遍历整个链表即whilepcur也就是pcurNULL指针的时候进入循环条件判断pcur-datax等于则说明我们找到了要查找的指定位置返回指定位置即可也就是pcur。若找不到我们返回NULL。画图理解代码4.指定pos位置之前插入数据文字描述指定位置之前插入数据同样的我们在开始操作的时候首先要断言传过去的pphead不能为空以及pos指针不能为空即assertppheadpospphead!NULL pos!NULL。首先我们判断pos所在的位置如果pos在第一个结点的位置那么就是头插我们直接调用头插的函数代码如果pos不在第一个结点的位置找pos前一个结点创建一个prev指针让其找到pos结点我们根据数据x申请一个结点大小的空间称为newnode。当找到prev和pos结点的时候让prev的next指针指向newnode再让newnode的next指针指向pos。先定义一个遍历指针从头结点开始往后走找到指定位置的前驱结点。动态开辟新结点给新结点的数据域赋值。让新结点的 next 指针指向原来指定位置的结点。让前驱结点的 next 指针指向这个新结点。插入完成链表链接关系重构完毕画图理解代码5.指定pos位置之后插入数据文字描述指定pos位置之后插入数据同样的我们在开始操作的时候首先要断言传过去的pphead不能为空以及pos指针不能为空即assertppheadpospphead!NULL pos!NULL。我们创建一个newnoed结点存储x数据然后找到pos以及pos-next结点。这里的插入顺序是有先后之分的我们先将newnode-next指向pos-next指针指向的位置其次将pos-next指向newnode看直观的图像吧代码6.删除指定pos位置的数据文字描述同样的我们在开始操作的时候首先要断言传过去的pphead不能为空以及pos指针不能为空即assertppheadpospphead!NULL pos!NULL。分为三种情况当pos在头结点和尾结点之间的时候与pos在尾结点的时候创建pcur变量遍历链表当pcur-nextpos跳出循环找到pcurpos-next以及pos结点。先让prev-next指针指向pos-next指针然后free(pos)结点再将其置为空。当pos为头结点的时候之间使用上面编译好的头删的函数。先判断链表是否为空若为空直接结束操作。定义遍历指针从头节点开始遍历找到pos 位置的前驱节点。用临时指针保存要删除的 pos 位置节点。让前驱节点的 next 指针指向被删节点的下一个节点。释放被删除节点的内存防止内存泄漏。删除完成链表节点链接重新连通。图像理解代码7.删除pos之后的数据文字描述首先还是断言判空同样的我们在开始操作的时候首先要断言传过去的pphead不能为空以及pos指针不能为空即assertppheadpospphead!NULL pos!NULL。我们可以思考一下当删除pos之后的结点的时候受到影响的结点应该有三个一个是pos结点pos-next结点pos-next-next结点这三个结点。所以我们先创建一个del指针指向pos-next那么del-next指针也就是pos-next-next。我们直接freedel之前先将pos-next指针指向del-next然后再free(del)再将del置为NULL代码8.链表的销毁这个销毁函数的核心逻辑就是用 pcur 遍历每个结点用 next 存好下一个结点的地址释放当前结点后再移动游标最后把外面的头指针置空全程保证不会丢失结点地址也不会访问非法内存。代码二.总结单链表 六大基础操作 文字步骤描述一、头删判断链表是否为空为空则直接结束。用临时指针记录当前头结点。头指针指向原头结点的下一个结点。释放临时指针指向的原头结点内存。二、尾删判断链表是否为空为空直接结束。定义指针从头遍历找到最后一个结点的前驱结点。临时指针记录尾结点。把前驱结点的 next 置为空。释放原尾结点内存。三、指定位置插入判断位置是否合法不合法直接结束。遍历找到指定位置的前驱结点。新建结点并赋值数据。新结点 next 指向原指定位置结点。前驱结点 next 指向新结点完成插入。四、指定位置删除判断链表为空或位置不合法直接结束。遍历找到指定位置的前驱结点。临时指针保存要删除的目标结点。前驱结点 next 指向目标结点的下一个结点。释放目标结点内存。五、链表查找从头结点开始逐个遍历链表结点。依次比对每个结点的数据域与目标值。找到匹配结点则返回该结点地址 / 位置。遍历完无匹配返回查找失败。六、链表销毁定义临时指针从头结点开始循环。每次先用临时指针保存当前头结点。头指针后移到下一个结点。释放临时指针指向的结点。循环直到链表为空所有结点全部释放。以上就是单链表操作的全部内容了希望对大家能有所帮助。

相关文章:

数据结构--------单链表下

书接上回,本章主要讲的是单链表的头删,尾删,指定位置插入删除,链表的查找和链表的销毁;一.链表的操作1.头删文字描述如下:正所谓头删,删除的肯定是链表的头元素,但是我们要怎么样进行…...

2026年AI自动剪辑视频软件怎么选择?5款自动剪辑软件对比

对很多短视频创作者来说,真正耗时的不是拍摄,而是后期剪辑。素材整理、卡点、粗剪、字幕和批量导出,往往会占用大量时间。因此,“AI能不能自动剪辑视频”成为越来越多人在2026年搜索的问题。尤其对于新手、电商运营或内容团队而言…...

GitHub Awesome List:OpenClaw机器人抓取学习资源全导航

1. 项目概述:一个汇聚开源AI学习技能的宝藏库最近在GitHub上闲逛,发现了一个名为botlearn-ai/awesome-openclaw-learning-skills的仓库。这个标题乍一看有点长,但拆解一下,信息量巨大。“botlearn-ai”暗示了项目与AI学习相关&…...

Claude文本压缩可视化工具:揭秘LLM长文本处理与Prompt优化

1. 项目概述与核心价值最近在折腾大语言模型(LLM)应用开发,特别是围绕 Anthropic 的 Claude 系列模型时,我发现了一个挺有意思的开源工具——danielsod12/claude-compaction-viewer。简单来说,这是一个专门用来“可视化…...

【无人艇】基于SMC滑模控制的AUV自主水下机器人控制器研究Matlab、Simulink仿真实现

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &…...

云原生CLI工具Atlasclaw:统一多集群管理与容器镜像操作

1. 项目概述:一个为云原生环境打造的“瑞士军刀”最近在折腾云原生环境下的自动化运维和资源管理,发现很多工具要么太重,要么功能太单一,总感觉缺那么一把趁手的“瑞士军刀”。直到我遇到了CloudChef/atlasclaw这个项目&#xff0…...

Anthropic 推出面向小企业的 Claude:助力企业 AI 应用,拓展发展可能性

面向小企业推出 Claude2026 年 5 月 13 日,Anthropic 推出 [面向小企业的 Claude],这是一套含连接器和预运行工作流的解决方案,可将 Claude 集成到小企业依赖的工具中,助小企业主利用 AI 完成待办事项。小企业 AI 应用现状小企业贡…...

延世大学揭秘:为何AI记忆模型越用越“糊涂“?

这项由韩国延世大学(Yonsei University)研究团队完成的研究,以预印本形式发布于2026年5月,论文编号为arXiv:2605.07755,有兴趣深入了解的读者可通过该编号查询完整论文。当我们谈起人工智能处理长篇文字或复杂序列时&a…...

首尔国立大学:AI读完“书“就扔掉笔记,竟比一直抄笔记更聪明?

这项由首尔国立大学数据科学研究生院主导的研究,以预印本形式发布于2026年5月,论文编号为arXiv:2605.06105,有兴趣深入了解的读者可以通过该编号查询完整论文。每次你问AI一个问题,它都要先把你给它的所有材料从头到尾读一遍&…...

因促达促进长高作用原理

因促达促进长高的作用机理:因促达是生长因子促进剂(IGF-1 Promotion)与γ-氨基丁酸骨胶原蛋白肽压片糖果的组合,同时作用于GH-IGF-1生长轴的三个靶点,实现更全面、更直接、更有效的效果。针对生长轴的第一个靶点&#…...

ESP32-S3电源管理与CircuitPython开发实战:从硬件设计到低功耗优化

1. ESP32-S3电源管理:不只是供电,更是项目成败的关键玩嵌入式开发,尤其是物联网项目,最头疼的往往不是代码逻辑,而是“电”。一块板子,插着USB线跑得欢,一拔掉电池,没俩小时就歇菜了…...

C语言顺序结构入门:程序如何从上往下执行

顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。例如:a3,b5,现交换a,b的值,这个问题就好像交换两个杯子水,…...

Mac上编译C语言的简易方法

1、 null 2、 在 Mac OS X 系统中,可通过 Xcode 学习和编写 C 语言程序。 3、 在Xcode中运行C语言程序需先创建项目,然后在项目中添加源代码文件。 4、 启动 Xcode,点击创建新项目以新建一个工程,具体操作所示。 5、 选择需创建…...

ViT模型压缩与加速技术:边缘计算部署实践

1. ViT模型压缩与加速技术概述视觉Transformer(ViT)模型近年来在计算机视觉领域取得了突破性进展,通过将图像分割为补丁序列并应用自注意力机制,实现了超越传统卷积神经网络(CNN)的性能表现。然而&#xff…...

PROFINET工业以太网:实时通信与设备互操作性解析

1. PROFINET技术架构解析PROFINET作为工业自动化领域的实时以太网标准,其核心价值在于解决了传统以太网在工业场景中的三大痛点:确定性延迟、实时性保障和设备互操作性。与普通办公以太网不同,工业环境要求通信系统必须满足严格的时序要求&am…...

助睿实验作业1:订单利润分流数据加工(零代码 ETL 完整流程)

前言 本文是我在完成 助睿数智(Uniplore)一站式数据科学实验平台 入门实验时的完整学习笔记。实验任务是将订单明细表与产品信息表关联,并根据利润正负将数据分流为盈利订单和亏损订单,最终输出到两个 Excel 文件中。全程使用零代…...

设计模式实战指南:从理论到工程落地的技能库构建

1. 项目概述:设计模式技能库的构建初衷最近在整理团队的技术资产,发现一个挺普遍的现象:很多同学在面试时能把设计模式的概念背得滚瓜烂熟,什么“单例模式确保一个类只有一个实例”,但一到实际项目里,面对稍…...

Chapter 13:企业实战 - 完整案例演练

Chapter 13:企业实战 - 完整案例演练 学习目标 掌握从需求分析到落地实施的完整流程 能够综合运用 Rules、Skills、MCP、Subagent 理解企业级项目的完整解决方案设计 具备独立设计企业扩展方案的能力 概念讲解(Why) 1.1 实战演练概述 案例背景: 某电商公司"极速商…...

VMware Workstation Pro 17免费激活全攻略:5000+密钥轻松上手虚拟化

VMware Workstation Pro 17免费激活全攻略:5000密钥轻松上手虚拟化 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versions…...

Windows系统自动化配置解决方案:WinUtil实战指南

Windows系统自动化配置解决方案:WinUtil实战指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 在当今数字化工作环境中&#xf…...

Poppins字体技术解析:跨语言几何字体的架构设计与实战应用

Poppins字体技术解析:跨语言几何字体的架构设计与实战应用 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 在全球化数字产品设计中,如何为多语言用户提供…...

10分钟精通rpatool:掌握Ren‘Py游戏资源管理的核心技术

10分钟精通rpatool:掌握RenPy游戏资源管理的核心技术 【免费下载链接】rpatool (migrated to https://codeberg.org/shiz/rpatool) A tool to work with RenPy archives. 项目地址: https://gitcode.com/gh_mirrors/rp/rpatool rpatool是一个专门处理RenPy游…...

FPGA调试技术:ILA与VIO核心实战指南

1. FPGA调试基础与核心工具解析在FPGA开发流程中,调试环节往往占据整个项目周期的40%以上时间。传统逻辑分析仪存在连接复杂、探头数量有限等问题,而基于JTAG的片上调试技术则提供了更高效的解决方案。Xilinx Vivado设计套件内置的集成逻辑分析仪(ILA)和…...

深度学习模型边缘部署技术与优化实践

1. 深度学习模型边缘部署的技术全景在计算机视觉和自然语言处理领域,深度学习模型的边缘部署正经历着从理论到实践的深刻变革。与传统的云端部署相比,边缘部署将计算能力下沉到终端设备,实现了数据处理的本土化。这种转变不仅大幅降低了网络延…...

无人机图像拼接:算法原理详解与OpenCV实现

前言 无人机航拍因其灵活、高效、覆盖广的优势,在地形测绘、农业监测、大坝巡检、应急救援等领域得到了广泛应用。然而受限于相机视场角与飞行高度,单张航拍图像往往无法覆盖整个目标区域,需要通过**图像拼接(Image Stitching / Mosaicing)**技术,将多张存在重叠区域的图…...

Python图的存储与遍历全解:三种存储方式 +BFS/DFS

图是计算机中非常重要的非线性数据结构,由节点(顶点)和边组成,广泛应用于社交网络、路径规划、推荐系统等场景。在Python中实现图算法,第一步就是解决图的存储问题,第二步是掌握图的遍历核心算法。 本文结合…...

用代码管理技能:构建结构化个人技能库的工程实践

1. 项目概述与核心价值最近在整理自己的技能栈时,发现了一个挺有意思的现象:很多开发者,包括我自己在内,对于“技能”的管理往往停留在简历上的一个列表,或者脑子里一个模糊的概念。当需要快速启动一个新项目、评估团队…...

AI智能提示词生成器——帮你更高效地使用AI解决问题

一款功能强大的Windows桌面应用程序,帮助用户快速生成标准化的AI提示词,支持多种行业和内容类型。 软件下载地址 功能特点 1. 丰富的提示词模板库 软件内置了庞大的提示词模板数据库,覆盖多个行业和场景: 分类行业/类型模板数…...

2026质量管控新趋势 FMEA避坑指南+六西格玛落地技巧

当下质量管控领域,“FMEA走过场”成为行业痛点,尤其在2026年第六届FMEA峰会后,这一话题持续升温,登上科技类热搜。不少技术从业者反馈,企业花大量时间填写FMEA表格,却依然挡不住现场故障频发,沦…...

2026年跨行业通吃的经管类黄金证书推荐

在数字经济纵深发展与人工智能技术广泛渗透的2026年,经济管理领域的人才需求范式发生了结构性转变。传统的单一专业技能边界日益模糊,企业对具备数据驱动决策、跨领域协同与敏捷管理能力的复合型人才需求迫切。在此背景下,系统性获取权威职业…...