嵌入式学习 day23:栈

发布时间:2026/10/8 2:25:14

嵌入式学习 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/10/6 17:07:31

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

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

2026/10/8 2:22:31

基恩士激光测距传感器C#通信实例:串口与以太网集成避坑指南

简介:面向工业自动化与C#开发者的实战资源:围绕基恩士CL3000激光测距仪,完整演示了通过串口通信实现设备连接、指令触发、测量数据读取与高度换算的全流程,适合需要掌握激光传感器二次开发、上位机编程及运动控制联调的工程师学习…

2026/10/8 2:22:31

Windows截图工具1:1高仿:Win32底层交互与DPI像素级精度实战

简介:这是一份面向C桌面开发初学者与进阶者的QQ截图工具高仿开源实现,聚焦屏幕捕获、图像编辑与交互式UI等核心功能模块,帮助开发者深入理解截图类软件的技术架构与工程实践。资源共29个文件,含8个C源文件(cpp&#xf…

2026/10/8 2:22:31

菜鸟驿站快递分发系统毕设部署全流程:从解压到答辩避坑指南

简介:一套面向计算机专业毕业设计的菜鸟驿站快递分发系统,基于Java技术构建,完整覆盖需求分析、总体设计、详细设计与功能测试等开发流程。系统从功能需求切入,梳理出主要功能模块,并完成总体结构、数据结构、安全设计…

2026/10/8 2:22:30

基恩士激光测距与C#上位机通信实战:从TCP协议到数据采集

简介:面向工业自动化领域开发者,围绕C#与基恩士CL3000激光测距仪串口通信的完整实例工程,解决高精度高度测量、设备指令控制与测量结果解析等实际问题。资源包共34个文件,压缩后仅159KB,以C#源文件(cs&…

2026/10/8 2:22:30

GLM-4源码包解压与本地推理实战:从校验到服务化

简介:本资源为GLM-4大模型代码仓库的完整源码压缩包,面向希望深入研究GLM-4实现细节的开发者、算法工程师及高校研究人员,可用于本地部署、二次开发与模型微调实验。包内共78个文件,以Python脚本为主体,涵盖推理、微调…

2026/10/8 2:17:30

Shell脚本一键部署K8s:Docker容器化集群实战

简介:面向需要快速搭建Kubernetes集群的运维与开发人员,这是一套基于Docker容器化的Shell脚本部署方案,覆盖Master与Node节点的初始化、安装、网络插件配置及集群卸载流程。脚本内置docker 24.0.7、cri-dockerd 0.3.9、Kubernetes v1.28.2等版…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑