发布时间:2026/8/16 4:51:17
嵌入式学习 day23:栈 一、什么是栈栈是一种先进后出的结构。最后放进去的东西最先拿出来最先放进去的东西最后才能拿出来。text入栈 → ← 出栈 ↓ ┌─────────┐ │ 元素5 │ ← 栈顶 ├─────────┤ │ 元素4 │ ├─────────┤ │ 元素3 │ ├─────────┤ │ 元素2 │ ├─────────┤ │ 元素1 │ ← 栈底 └─────────┘关键术语栈顶允许插入和删除的一端栈底不允许操作的一端入栈把元素放到栈顶出栈从栈顶取出元素二、栈的分类根据栈针指向位置的不同栈分为几种空栈栈针指向下一个元素要放的位置先存数据再移动栈针满栈栈针指向当前栈顶元素的位置先移动栈针再存数据增栈栈针向高地址移动减栈栈针向低地址移动我当前主要学的是空增栈。三、顺序栈3.1 结构体定义c#define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; // 存数据的数组 int top; // 栈针 } SeqStack;top存的是下一个元素要放的位置的下标。top 0表示栈是空的。3.2 初始化cvoid InitStack(SeqStack *s) { s-top 0; }3.3 判断空和满cint IsEmpty(SeqStack *s) { return s-top 0; } int IsFull(SeqStack *s) { return s-top MAX_SIZE; }3.4 入栈cint Push(SeqStack *s, int data) { if (IsFull(s)) { return -1; } s-data[s-top] data; // 先放数据 s-top; // 再移动栈针 return 0; }3.5 出栈cint Pop(SeqStack *s, int *data) { if (IsEmpty(s)) { return -1; } s-top--; // 先移动栈针 *data s-data[s-top]; // 再取数据 return 0; }注意入栈和出栈的顺序刚好相反。四、链式栈4.1 结构体定义ctypedef struct StackNode { int data; struct StackNode *next; } StackNode; typedef struct { StackNode *top; // 栈顶指针 int size; // 元素个数 } LinkStack;4.2 初始化cvoid InitLinkStack(LinkStack *s) { s-top NULL; s-size 0; }4.3 入栈链式栈的入栈就是链表的头插cint Push(LinkStack *s, int data) { StackNode *newNode (StackNode *)malloc(sizeof(StackNode)); if (newNode NULL) { return -1; } newNode-data data; newNode-next s-top; // 新节点指向原来的栈顶 s-top newNode; // 栈顶换成新节点 s-size; return 0; }4.4 出栈cint Pop(LinkStack *s, int *data) { if (s-top NULL) { return -1; } StackNode *tmp s-top; *data tmp-data; s-top tmp-next; // 栈顶指向下一个节点 free(tmp); s-size--; return 0; }链式栈其实就是只在头部操作的单向链表入栈等于头插出栈等于删头。五、今日总结今天学了栈核心要点如下栈的特点先进后出只能在一端操作顺序栈用数组实现top指向下一个元素要放的位置链式栈用链表实现入栈头插出栈删头入栈出栈顺序相反入栈先存后移出栈先移后取今日感悟栈和表不同只能在指定的位置插入和删除。但是栈和表仍存在着共同点当表的基础打好了栈的代码编写就相对轻松很多也更容易理解。

相关新闻

2026/8/16 4:51:17

从串口通信到LED点阵屏(51单片机学习笔记)

完成矩阵键盘与密码锁的综合实践后,这一阶段继续学习两个核心外设:UART串口通信与88 LED点阵屏。串口让单片机具备了与电脑、外部模块双向通信的能力,正式打开了嵌入式交互的大门;LED点阵屏则在数码管动态扫描的基础上&#xff0c…

2026/8/16 5:51:21

Nginx Rewrite机制解析与企业级实战指南

1. Nginx Rewrite机制深度解析作为Web服务器领域的瑞士军刀,Nginx的rewrite功能堪称URL处理的艺术品。我曾在电商系统迁移中,仅用20条rewrite规则就完成了10万商品URL的无缝切换,这个经历让我深刻认识到rewrite在真实业务场景中的威力。不同于…

2026/8/16 5:51:21

从 4192 个参数看懂 GPT:拆解 Andrej Karpathy 的 microGPT

真实的 GPT-4、ChatGPT 有上千亿参数,堆着几十上百层 Transformer,训练数据是整个互联网。这样的规模让"理解 GPT 到底在做什么"变成一件望而生畏的事——但如果把它缩小到 4192 个参数、1 层 Transformer、纯 Python 写、不依赖任何深度学习框…

2026/8/16 5:51:21

2026随身WiFi行业观察:飞猫M1差异化竞争优势全解析

一、行业现状:随身WiFi市场普遍存在多重使用痛点 当下随身WiFi赛道品牌数量众多,但大量中小白牌产品存在同质化短板,也是消费者高频吐槽的核心问题:多数低价机型芯片方案基础,弱网环境信号衰减明显,郊区、楼道、高铁等…

2026/8/16 5:51:21

Indigo Nebula AI — 漫剧一键生成平台开发记录

技术栈 FastAPI Vue3 Redis MySQL Docker Compose。 开发周期:2026 年暑期项目实训。一、项目概述Indigo Nebula AI 是一个面向短视频创作者的 AI 漫剧制作平台,目标是把"灵感→小说→角色→分镜→图片→视频→配音→成片"这七步流程&…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/15 4:56:16

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…