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

《C语言学习:链表》19

写在前面:本笔记为个人学习各平台C语言系列课程所作,仅供交流学习,不得作他用。

1. 定义

(1)链表定义

整个链表里,第一个成员需要有一部分表示这是链表的头,最后一个成员需要有一部分表示这是链表的尾。除最后一个成员外,其他每个成员的结构都是一部分表示数据,一部分表示地址,该地址指向下一个成员。

把链表里每一个成员(数据+指针)叫做结点。头文件里通常定义结点结构:

这里node第二个成员实际上是一个指向同样类型变量的指针,这里不能省略struct,因为还没有定义完。

(2)主函数实现链表例子

尾插法实现单链表,这一段代码放在主函数里。

第一句表示初始化链表,找到头。head=null代表链表现在是空的,没有任何节点。

在循环里,不断读入数字直到number为-1,把每一个有效数字放入链表。这个过程被表示为:读入一个有效数,新建一个结点p,malloc分配给它对应内存,让其数值部分为读入有效数字、指针部分(p.NEXT)为NULL,因为默认没有后续结点。

判断部分:新建结点last=head。如果链表为空(对于else部分),新结点就是首个结点;如果链表非空(对应if成立,head不为NULL),循环走到末尾结点(last.next为NULL时就是末尾结点,跳出),再把新建的结点p挂在当前末尾结点last的尾部。

2. 链表函数add()

这个函数其实就是把上一节定义部分循环里的内容单独领出来整成一个函数,作用是往链表最后新加一个值。稍有不同的是,这里单独新定义了一个结构_list,里面只放了一个指针head。

这是因为在调用这个添加元素的函数时,我们需要知道新的head指向哪里,但如果只把head作为变量传入自定义函数,在自定义函数里修改的head对主函数head没有用,作为全局变量的话又不方便移植。但如果作为一种新的结构体,不仅解决了这一问题,还能够在这个新结构体里加上更多元素,实现其他功能,比如可以考虑加上元素末尾tail。

3. 链表搜索

这个函数实现了遍历链表并打印值的功能。这里p不一定要=p.next,可以根据具体情况具体安排。

这一段核心就在这个for循环。

4. 链表删除结点

链表删除当前结点,需要做两步:一是让前一个结点的next指向后一个结点,二是把当前结点的内存释放。实现这一步需要两个指针,一个指向当前结点,一个指向前一个结点。

这一段放在主函数就行。

这里循环的起始有两个值,但是结束条件只有p为NULL,所以q是一个不安全的指针,有可能出现q在循环时指向了最后一个结点的下一个(不存在!!!)

用一种机械的方式去判断循环或数组边界:当错误会发生在赋值的左边时,就有问题。

因此这里额外加了判断,在p.value=num的情况下(找到值),判断是否q存在(当p指向第一个结点时q无):存在,则赋值q,使前一个结点跳过当前结点指向后一个结点;不存在,则赋值head,直接删去第一个结点。

5. 链表清除

链表使用完之后需要全部清除,每一个结点都是malloc出来的,需要释放。

挨个释放即可,放在主函数最后。

http://www.rkmt.cn/news/1457247.html

相关文章:

  • 半导体晶圆激光保护液——亦盛科技
  • 2026上海AI搜索GEO优化服务商测评榜单与核心优势解析
  • 别再为VCS和Verdi安装发愁了!一个Ubuntu 20.04用户的保姆级踩坑实录(含gcc版本、lib库缺失等全套解决方案)
  • 从假设检验到机器学习:正态、卡方、指数分布在数据分析实战中的角色串讲
  • 别再只会刷新了!手把手教你用Chrome DevTools和Nginx日志定位‘页面未找到’的元凶
  • SRWE完整指南:免费窗口编辑器终极解决方案,轻松调整任意程序窗口大小
  • 使用实用方法快速备份 Outlook 联系人 [已测试]
  • AI率总超标?2026年AI论文写作工具排行榜权威发布,轻松达标不是梦!
  • MATLAB水声信道仿真工具:支持时变多径建模、实测数据注入与可视化分析
  • 基于STM32的纯正弦波逆变器全套开发包:含可投产硬件设计、SPWM生成工具与完整控制固件
  • SciTech-Science-Fingerprints指纹-刑侦提取之碘蒸汽熏蒸法 + 502熏显法与Glue胶水
  • 从Word迁移到LaTeX避坑指南:我踩过的公式编号、图片路径和参考文献引用这些‘雷’
  • 技术债”不只烂代码:那个被所有人忽视的“密码债”
  • 保姆级教程:手把手教你搞定CYUSB3014芯片的SDK与驱动安装(附常见问题排查)
  • 云教务如何设计学生成长档案:学生信息、成绩、考勤、评价、活动
  • 矿山井下通信新标杆:A-47模块的本安声学优化实录
  • 宁波制造工厂短视频运营破局:口碑服务商实测对比 - 奔跑123
  • 立式烘箱品牌有哪些,朗秀科技怎么样 - 工业品牌热点
  • 2026 年深圳小程序开发资质新规详解!新手避坑必备合规指南
  • OpenRocket火箭设计软件完整指南:从零开始掌握开源火箭仿真
  • Baserow:开源版 Airtable,零代码搭建数据库与自动化
  • 从科研小白到绘图达人:用MATLAB legend函数搞定论文中的多曲线图例
  • 别再手动加载数据了!用Simulink Model Callbacks实现模型启动自动化(附set_param代码)
  • 基于树莓派与云端服务搭建低成本智能家居中枢实战指南
  • 别再浪费时间乱找数据分析自学视频?2026年过来人劝告选错真的亏大了,这6套视频总直接领
  • 宁波豆包推广公司实测对比:制造业工厂获客避坑指南 - 奔跑123
  • 别再让MATLAB图丑哭了!手把手教你用title、xlabel、legend做出能发论文的漂亮图表
  • AI+HR效能跃迁实战手册(2024头部科技公司内部培训首曝)
  • 【字节跳动】巨量引擎 工业级全栈 完整全集源码(终极完整版)
  • 2026年适合零基础的无人机驾驶员培训选购指南 - 工业品牌热点