news 2026/7/10 4:40:45

04_C语言数据结构与算法之线性数据结构:链表 —— 非连续内存的灵活王者

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
04_C语言数据结构与算法之线性数据结构:链表 —— 非连续内存的灵活王者

C语言数据结构与算法之线性数据结构:链表 —— 非连续内存的灵活王者

  • 做嵌入式开发的朋友,想必都遇到过这样的场景:用数组做串口数据缓存时,要是数据量突然暴涨,数组固定的长度要么不够用导致数据溢出,要么提前分配超大数组浪费宝贵的内存;想在数据中间插入一个新的传感器读数,却要把后面的元素全都后移,在单片机这种资源受限的环境里,每一次循环移动都可能占用宝贵的CPU时间。

  • 还有更头疼的:在裸机程序里实现一个任务队列,需要频繁地在队列头部删除已完成的任务、尾部添加新任务,用数组来做的话,要么每次删除都要移动一堆元素,要么就得用环形缓冲区的复杂逻辑来规避——可环形缓冲区又受限于初始的数组大小,一旦任务数量超过预设值,还是会陷入困境。

  • 这时候你会不会想:要是有一种数据结构,能像搭积木一样,要一个节点就申请一块内存,不用了就释放,插入删除数据时不用动其他元素,那该多好?

其实,这就是链表的核心价值。它挣脱了连续内存的束缚,以非连续内存的存储方式,成为数据结构里的“灵活王者”。在嵌入式开发、后台服务的高频数据操作场景中,链表的灵活性往往能解决数组和顺序表难以攻克的问题。今天,我们就从嵌入式开发的实际需求出发,聊聊链表的三种常见形态——单链表、双向链表、循环链表,读懂非连续内存的灵活操作艺术。

一、链表的本质:非连续内存的“链式连接”

与数组和顺序表的连续内存布局不同,链表的核心是节点指针

  • 节点:链表的基本单元,包含两部分——数据域(存储实际数据,如传感器的数值、任务的ID)和指针域(存储下一个节点的地址,双向链表还会存储上一个节点的地址)。

  • 指针:通过指针将分散在内存中不同位置的节点串联起来,形成一个线性的逻辑结构。

这种设计让链表彻底摆脱了连续内存的限制:

  1. 内存按需分配:需要存储数据时,才向系统申请一块内存作为节点;数据删除后,可立即释放节点内存,极大节省内存资源(这对内存只有几KB、几十KB的嵌入式MCU来说,尤为重要)。

  2. 物理分散,逻辑连续:节点在内存中的地址可以是任意的,只要通过指针指向彼此,就能在逻辑上保持线性顺序。

对比数组的“整块连续内存”,链表就像一串珍珠:每颗珍珠(节点)是独立的,通过线(指针)连在一起,哪怕珍珠的位置分散,也不影响整体的顺序。

二、单链表:最简单的链式结构,嵌入式场景的“轻量之选”

单链表是链表中最基础的形态,每个节点只有一个指针域,指向下一个节点next),最后一个节点的next指针指向NULL,表示链表结束。此外,通常会用一个头指针head)指向第一个节点,作为链表的入口。

1. 单链表的结构定义(嵌入式场景适配版)

在嵌入式开发中,我们通常会用结构体定义节点,数据域可以根据实际需求设计(比如存储串口数据、任务信息):

#include <stdio.h> #include <stdlib.h> #include <stdint.h> // 单链表节点定义(以存储嵌入式传感器数据为例) typedef struct Node { uint16_t sensor_data; // 数据域:存储传感器采集的16位数值 struct Node *next; // 指针域:指向下一个节点 } ListNode;

2. 单链表的核心操作(嵌入式场景优化)

单链表的操作核心

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 17:44:48

Excalidraw数据绑定实验:动态图表与实时数据库联动

Excalidraw数据绑定实验&#xff1a;动态图表与实时数据库联动 在一次团队的线上架构评审会上&#xff0c;我们遇到了一个熟悉又棘手的问题&#xff1a;PPT里的系统拓扑图是两周前画的&#xff0c;而今天某核心服务已经宕机三小时——但没人更新那张图。讨论仍在继续&#xff0…

作者头像 李华
网站建设 2026/7/10 10:09:22

用自然语言画图是什么体验?Excalidraw AI功能亲测报告

用自然语言画图是什么体验&#xff1f;Excalidraw AI功能亲测报告 在一次远程架构评审会议上&#xff0c;团队正讨论一个微服务系统的交互流程。以往这种场景下&#xff0c;总得有人花十几分钟在白板上拖拽框框、连线标注&#xff0c;边画还边解释&#xff1a;“这个是订单服务…

作者头像 李华
网站建设 2026/7/9 19:58:01

LangChain核心逻辑详解:数据流动与无限处理问题解决方案,建议收藏

本文详解LangChain框架核心逻辑&#xff0c;阐明数据在加载、处理、存储、检索和生成四环节的流动过程。针对RAG和Agent场景中常见的无限处理问题&#xff0c;提供实用的紧急处理和预防方法&#xff0c;包括设置超时限制、资源约束和循环检测等。强调LangChain不是黑盒&#xf…

作者头像 李华
网站建设 2026/7/10 6:08:14

AgentScope深入学习-Pipeline与消息

协调的艺术&#xff1a;Pipeline 与消息系统核心解析 请关注公众号【碳硅化合物AI】 摘要 多智能体系统的核心是协调。AgentScope 通过 Pipeline 和消息系统实现了优雅的多智能体编排。本文将深入分析 MsgHub、Pipeline 模式以及消息系统的设计。你会发现&#xff0c;消息&a…

作者头像 李华
网站建设 2026/7/10 9:54:15

18、电脑打印、扫描与上网全攻略

电脑打印、扫描与上网全攻略 1. 打印难题解决与技巧 1.1 特殊情况打印方法 当网页只有邮件选项而无打印选项时,可将页面邮件发送给自己,依据邮件程序,以邮件形式打印或许效果更佳。若只想打印网页中的几段内容,用鼠标选中目标部分,在 Internet Explorer 的工具菜单中选择…

作者头像 李华
网站建设 2026/7/9 12:12:34

19、微软 Edge 浏览器:高效上网的利器

微软 Edge 浏览器:高效上网的利器 在当今数字化时代,浏览器是我们访问互联网的重要工具。微软 Edge 浏览器以其快速的浏览速度和简洁的界面,成为了很多用户的选择。本文将详细介绍微软 Edge 浏览器的使用方法、功能特点以及一些实用技巧。 一、微软 Edge 浏览器简介 微软…

作者头像 李华