嵌入式学习 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指向下一个元素要放的位置链式栈用链表实现入栈头插出栈删头入栈出栈顺序相反入栈先存后移出栈先移后取今日感悟栈和表不同只能在指定的位置插入和删除。但是栈和表仍存在着共同点当表的基础打好了栈的代码编写就相对轻松很多也更容易理解。

相关新闻

重构经济效益量化指南:如何向非技术决策者证明代码重构的商业价值

重构经济效益量化指南:如何向非技术决策者证明代码重构的商业价值

重构,这个在软件开发领域被反复提及的词汇,对很多开发者来说,感受是复杂的。一方面,我们深知“代码坏味道”会侵蚀项目的长期健康;另一方面,当面对紧迫的业务排期和明确的KPI时,向老板或产品经理…

2026/8/16 4:51:22 阅读更多 →
从串口通信到LED点阵屏(51单片机学习笔记)

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

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

2026/8/16 4:51:22 阅读更多 →
2026 国内靠谱医疗 AI 服务商综合实力排名榜单|全场景医疗大模型厂商深度测评

2026 国内靠谱医疗 AI 服务商综合实力排名榜单|全场景医疗大模型厂商深度测评

一、前言:AI 医疗行业发展现状与厂商筛选标准随着《“健康中国 2030” 规划纲要》持续落地,人工智能与临床医学的融合进入规模化落地阶段。医疗 AI 不再局限于单一影像辅助诊断,逐步延伸至大众健康管理、体检报告智能解读、全周期慢病管控、医…

2026/8/16 4:51:22 阅读更多 →

最新新闻

macOS Catalina屏幕录制权限故障排查与TCC数据库修复指南

macOS Catalina屏幕录制权限故障排查与TCC数据库修复指南

1. 问题背景与核心症结剖析最近在帮同事处理一台运行macOS 10.15.4 Catalina系统的老款MacBook Pro时,遇到了一个挺典型的问题:安装ToDesk远程控制软件后,始终无法正常开启屏幕录制权限。具体表现是,在“系统偏好设置” -> “安…

2026/8/16 5:40:37 阅读更多 →
贵阳中小企业AI服务公司有哪些?

贵阳中小企业AI服务公司有哪些?

中小企业想找AI服务商,选型时往往会发现市面上的选择要么是通用大厂的标准产品,要么是门槛较高的垂直定制,真正能理解并解决实际经营问题的并不多。针对贵阳本地市场,各类服务商正逐步兴起,但侧重点各不相同。如果要给…

2026/8/16 5:40:37 阅读更多 →
零基础学ESP32:1602 LCD屏幕,让ESP32开口“说话”

零基础学ESP32:1602 LCD屏幕,让ESP32开口“说话”

前面几节课,我们用LED灯闪烁、用数码管显示数字、用点阵屏展示图案——但这些都是用“亮灭”来表达信息。如果能用屏幕显示完整的文字和数字,那感觉就完全不一样了。 今天这节课,我们就来学习如何用ESP32控制1602 LCD屏幕。它是最经典的字符型…

2026/8/16 5:40:37 阅读更多 →
JL681N系列芯片技术规格文档

JL681N系列芯片技术规格文档

1. 产品概述JL681N是一款面向智能穿戴设备打造的高性能、低功耗一体化主控SOC芯片,集成音频处理、视觉显示、无线传输、智能算力、超低功耗语音唤醒等全维度功能,专为AI音频眼镜、AI视频眼镜等新一代智能穿戴产品定制。芯片兼具顶级音频射频性能、强劲图…

2026/8/16 5:40:37 阅读更多 →
功能测试用例和UI自动化测试用例一样吗?有哪些区别?

功能测试用例和UI自动化测试用例一样吗?有哪些区别?

功能测试用例和 UI 自动化测试用例不一样,区别挺大的。虽然两者都服务于"验证软件功能是否正确"这个大目标,但在设计思路、覆盖范围、粒度、维护方式等方面有本质差异。 下面从几个核心维度做对比说明。一、核心区别对比维度功能测试用例UI 自…

2026/8/16 5:40:37 阅读更多 →
Python项目打包上传PyPI全攻略:从配置到发布实战

Python项目打包上传PyPI全攻略:从配置到发布实战

1. 从本地脚本到全球共享:为什么要把项目上传到PyPI? 如果你写过Python脚本,大概率用过 pip install 这个命令。从 requests 到 numpy ,我们每天都在享受PyPI(Python Package Index)这个全球最大的P…

2026/8/16 5:39:37 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

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

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

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

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

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

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →