栈到底是什么
一、栈到底是个啥说白了栈就是一种操作受限的线性表。 普通的数组、链表想在哪插在哪删都行但栈不行它只开放一端给你操作这一端叫栈顶另一端封死叫栈底。所有的插入、删除都只能在栈顶做。这种限制催生出了栈最核心的特性后进先出LIFO, Last In First Out。 举个最生活化的例子摞书。 你往桌上放书一本本往上叠最后放的那本在最上面你要拿书只能先拿最上面那本。最后放上去的第一个被拿下来 —— 这就是标准的栈逻辑。往栈里加数据叫入栈压栈从栈里删数据叫出栈弹栈俩操作都只碰栈顶不碰栈底。二、栈为什么偏爱数组实现理论上数组和链表都能实现栈但实际写代码的时候几乎所有人都会选数组。 原因非常实在栈的所有操作都在尾部而数组的尾插、尾删天然就是 O (1)完全对上了再加上数组是连续内存缓存命中率高比链表省空间还跑得快没理由不用。栈的结构长什么样一个动态数组实现的栈结构体里就三样东西typedef int STDataType; typedef struct Stack { STDataType* a; // 存数据的动态数组 int top; // 栈顶标记指向下一个可插入的位置 int capacity; // 数组总共能存多少数据 } ST;这里说下top的约定一般我们让它指向 “栈顶元素的下一个空位”。比如空栈的时候top0入栈一个元素后top1这样top的值刚好等于栈里元素的个数省得单独维护 size。初始化和销毁初始化就是把栈置成空状态销毁就是把申请的数组释放掉避免内存泄漏。// 初始化栈 void STInit(ST* ps) { assert(ps); ps-a NULL; ps-top 0; ps-capacity 0; } // 销毁栈 void STDestroy(ST* ps) { assert(ps); free(ps-a); ps-a NULL; ps-top 0; ps-capacity 0; }入栈先看容量够不够入栈是最常写的操作核心就两步先检查容量满了就扩容再把数据放到栈顶top往后挪一位。扩容这里有个细节不用直接改结构体里的capacity先用局部变量newcap算好新容量申请成功了再正式赋值。万一realloc失败了原栈的数据和容量都不会乱这是写动态结构的基本防御性写法。// 入栈 void STPush(ST* ps, STDataType x) { assert(ps); // 容量满了先扩容 if (ps-top ps-capacity) { int newcap ps-capacity 0 ? 4 : 2 * ps-capacity; STDataType* tmp (STDataType*)realloc(ps-a, newcap * sizeof(STDataType)); if (tmp NULL) { perror(realloc 申请失败); exit(1); } ps-a tmp; ps-capacity newcap; } // 栈顶放入数据top后移 ps-a[ps-top] x; }出栈和取栈顶出栈特别简单只要栈不是空的把top减 1 就完事了。 不用特意把原位置的数据清掉因为下次入栈会直接覆盖。数据还在那里但只要top不认可它它就不算栈里的元素了。// 出栈 void STPop(ST* ps) { assert(ps); assert(ps-top 0); // 空栈不能弹 ps-top--; } // 取栈顶元素 STDataType STTop(ST* ps) { assert(ps); assert(ps-top 0); return ps-a[ps-top - 1]; }几个实用的小接口判空、取元素个数都是一行代码的事// 栈里有多少个元素 int STSize(ST* ps) { assert(ps); return ps-top; } // 栈是不是空的 bool STEmpty(ST* ps) { assert(ps); return ps-top 0; }三、栈的特点和适用场景栈的几个关键特点操作单一只在栈顶增删逻辑简单不容易出 bug效率极高入栈、出栈、取栈顶全是 O (1)几乎没有额外开销不支持随机访问想拿栈底的元素必须把上面的全弹出去内存连续数组实现的缓存友好访问速度快

相关新闻

芯片烧录失败排查指南:五大类常见错误的根因与解决

芯片烧录失败排查指南:五大类常见错误的根因与解决

做硬件这几年,烧录芯片算是既基础又最容易让人血压升高的一关。明明是照着原理图接的线,按着手册写的配置,结果点击烧录按钮之后,不是报 No target connected ,就是卡在 Timeout communicating with target &#…

2026/10/4 20:56:09 阅读更多 →
Shell数学计算全攻略:从整数到浮点,一文搞定脚本运算

Shell数学计算全攻略:从整数到浮点,一文搞定脚本运算

早年间我刚开始正经写 shell 脚本的时候,遇到过一件让我怀疑人生的事:在终端里敲echo 1 2,满心期待它给我输出个 3,结果它原封不动打印了一行1 2。后来才明白,shell 骨子里是个“字符串搬运工”,它默认把…

2026/10/4 20:55:08 阅读更多 →
Java AIO实现MQTT百万连接:从架构设计到落地避坑

Java AIO实现MQTT百万连接:从架构设计到落地避坑

简介:基于 Java AIO 实现的低延迟、高性能百万级 MQTT 客户端组件与 Broker 服务,定位为物联网、边缘计算场景中需要自建消息服务器的 Java 开发者,解决多协议接入、高并发连接和集群扩展等核心问题。压缩包共 282 个文件,文件类型…

2026/10/4 20:55:08 阅读更多 →

最新新闻

2026深度解读:Work Agent如何整合网页、文档与表格信息完成长程任务

2026深度解读:Work Agent如何整合网页、文档与表格信息完成长程任务

AI技术落地的重心,正在从即时问答转向持续性任务处理。早期大模型仅能完成单轮文本应答,用户输入问题,模型输出一段文字,对话窗口关闭,任务随即终止。随着多轮对话、工具调用能力成熟,AI可以在会话内保留上…

2026/10/4 21:42:53 阅读更多 →
macOS LuatOS开发串口适配全指南:驱动、权限与设备命名

macOS LuatOS开发串口适配全指南:驱动、权限与设备命名

1. 为什么 macOS 用户在 LuatOS 开发中总卡在“第一步”? 我第一次在 MacBook Pro 上打开 Luatools 的时候,盯着那个灰色的“设备未连接”提示框看了整整三分钟——不是因为不会用,而是因为根本找不到设备。USB 线插了又拔、端口换了又换、终…

2026/10/4 21:42:53 阅读更多 →
WorkBuddy+MCP+Skill:AI办公的实战工作台构建指南

WorkBuddy+MCP+Skill:AI办公的实战工作台构建指南

1. 这不是一份“指南”,而是一份真实办公场景的作战地图WorkBuddy 这个名字最近在技术圈和产品团队里出现的频率,已经高到让我在咖啡机旁都能听见三个人同时讨论它。但说实话,我第一次看到《WorkBuddy 行业应用指南》这个征集标题时&#xff…

2026/10/4 21:42:53 阅读更多 →
嵌入式Linux音频调试实战:从声卡识别到录音失真的系统排查

嵌入式Linux音频调试实战:从声卡识别到录音失真的系统排查

1. 为什么Audio调试在嵌入式项目里总像“黑盒”——从声卡识别失败说起 你有没有遇到过这样的场景:硬件工程师拍着胸脯说“音频通路完全OK”,软件工程师确认驱动已加载,但 aplay -l 命令跑出来却只显示“No soundcards found”?…

2026/10/4 21:42:53 阅读更多 →
Claude 百万 Token 上下文翻车复盘:用 TaoToken 统一 Key 做信噪比压测的 48 小时

Claude 百万 Token 上下文翻车复盘:用 TaoToken 统一 Key 做信噪比压测的 48 小时

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

2026/10/4 21:42:53 阅读更多 →
MIPI D-PHY LP RX本质解析:状态机驱动的低功耗接收机制

MIPI D-PHY LP RX本质解析:状态机驱动的低功耗接收机制

1. 什么是MIPI LP RX?它不是“低功耗接收器”的简单缩写刚接触这个标题时,我第一反应是——这又是个被过度简写的工程黑话。MIPI LP RX,表面看像是“MIPI Low Power Receiver”的缩写,但实际在硬件接口设计一线,它特指…

2026/10/4 21:41:52 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/4 20:14:29 阅读更多 →