1.栈:后进先出的线性数据结构
一、什么是栈栈Stack是一种后进先出LIFO, Last In First Out的线性数据结构它只允许在一端进行插入和删除操作这一端被称为栈顶top另一端则称为栈底base。简单来说栈就像一个 “一端封闭的容器”最后放入的元素会最先被取出最先放入的元素会最后被取出。二、栈的核心结构视频中提到栈的本质是一段连续内存 一个栈顶指针连续内存用于存储栈中的元素通常用数组实现栈顶指针top指向栈顶元素的位置初始值为-1表示栈为空。对应的 C 语言代码定义如下#define MAX_SIZE 100 // 栈的最大容量 // 栈的结构体定义 typedef struct { int data[MAX_SIZE]; // 连续内存存储栈元素 int top; // 栈顶指针-1表示空栈 } Stack;三、栈的基本操作栈的核心操作有两个入栈Push和出栈Pop这两个操作的时间复杂度都是O(1)常数时间因为它们不需要遍历整个栈只需要操作栈顶指针。1. 入栈Push压入栈顶入栈操作是将元素添加到栈顶步骤如下判满如果栈顶指针等于MAX_SIZE - 1说明栈已满无法再添加元素先自增再写入将栈顶指针加 1然后将元素写入到新的栈顶位置。代码实现// 入栈操作 void push(Stack *s, int value) { // 判满栈顶指针到达最大容量的前一个位置 if (s-top MAX_SIZE - 1) { printf(栈已满无法入栈\n); return; } // 先自增栈顶指针再写入元素 s-data[s-top] value; }2. 出栈Pop弹出栈顶出栈操作是将栈顶元素取出步骤如下判空如果栈顶指针等于-1说明栈为空无法再取出元素先读取再自减先读取栈顶元素然后将栈顶指针减 1。代码实现// 出栈操作 int pop(Stack *s) { // 判空栈顶指针为-1表示空栈 if (s-top -1) { printf(栈为空无法出栈\n); return -1; // 用-1表示错误实际应用中可自定义错误码 } // 先读取栈顶元素再自减栈顶指针 return s-data[s-top--]; }四、栈的初始化与建立在使用栈之前需要先初始化栈将栈顶指针设置为-1表示栈为空。代码实现// 初始化栈 void initStack(Stack *s) { s-top -1; // 栈顶指针归位到-1表示空栈 }建立栈的过程就是逐个将元素入栈的过程int main() { Stack s; initStack(s); // 初始化栈 // 逐个入栈建立栈 push(s, 10); push(s, 20); push(s, 30); // 出栈测试 printf(出栈元素%d\n, pop(s)); // 输出30后进先出 printf(出栈元素%d\n, pop(s)); // 输出20 printf(出栈元素%d\n, pop(s)); // 输出10 return 0; }五、栈溢出Stack Overflow栈的容量是有限的当入栈的元素超过栈的最大容量时就会发生栈溢出。视频中提到当栈顶指针越过MAX_SIZE - 1时栈空间就耗尽了此时入栈操作会失败。避免栈溢出的方法合理设置栈的最大容量MAX_SIZE在入栈前先判断栈是否已满。六、总结栈是一种非常基础且重要的数据结构它的核心特点是后进先出通过连续内存 栈顶指针实现基本操作的时间复杂度为O(1)。在实际应用中栈常用于函数调用栈保存函数的返回地址和局部变量表达式求值如后缀表达式计算括号匹配问题深度优先搜索DFS等。希望这篇文章能帮助你理解栈的原理和实现

相关新闻

毕设开源 深度学习街道行人流量计数系统

毕设开源 深度学习街道行人流量计数系统

文章目录 0 前言1 项目运行效果2 设计概要2 原理介绍2.1 目标检测概况什么是目标检测?发展阶段 2.2 行人检测行人检测简介行人检测技术难点行人检测实现效果 4 最后 0 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题…

2026/10/21 5:50:32 阅读更多 →
Jellyfin Desktop终极指南:打造高效媒体播放中心的完整解决方案

Jellyfin Desktop终极指南:打造高效媒体播放中心的完整解决方案

Jellyfin Desktop终极指南:打造高效媒体播放中心的完整解决方案 【免费下载链接】jellyfin-desktop Jellyfin Desktop Client 项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin-desktop Jellyfin Desktop是一款基于Qt WebEngine和libmpv构建的开源…

2026/10/20 11:59:12 阅读更多 →
前端效率的真正瓶颈,不在“写代码“,在“设计和代码之间的那一层“

前端效率的真正瓶颈,不在“写代码“,在“设计和代码之间的那一层“

聊前端效率,大部分文章都在讲同一个话题:怎么让代码写得更快。什么脚手架、代码片段、AI 补全、组件库……这些当然有用,但我想先说一个反常识的观察: 一个前端团队真正的效率瓶颈,往往不是"写代码"本身&am…

2026/10/16 7:38:16 阅读更多 →

最新新闻

SpringBoot整合SSM实验室预约系统:从设计到答辩完整实战

SpringBoot整合SSM实验室预约系统:从设计到答辩完整实战

实验室预约这类系统,在我接触过的毕业设计和实际项目里,出现频率相当高。原因也很直接:它的业务流程足够完整,涉及用户角色、资源管理、状态流转、时间冲突判断这些核心逻辑,却又不像电商或社交系统那样无限膨胀&#…

2026/10/21 5:50:19 阅读更多 →
STM32+PT100工业级温度采集系统设计与实现

STM32+PT100工业级温度采集系统设计与实现

简介:本资源是一套基于STM32单片机的PT100铂电阻高精度温度采集系统完整开发包,面向嵌入式初学者、电子设计竞赛学生及工业测温应用开发者,解决低温至高温范围内稳定、抗干扰温度传感与数字转换的核心问题。压缩包共277个文件,含6…

2026/10/21 5:50:19 阅读更多 →
C++控制台游戏迭代实践:迷宫生成、存档与回合制战斗设计

C++控制台游戏迭代实践:迷宫生成、存档与回合制战斗设计

1. 版本迭代概览:3.17更新到底改了什么"勇闯迷塔"是我用C写的一个控制台小游戏,从最初十几层的纯迷宫探索,到3.17版本加入存档、战斗和新楼层,前后断断续续改了大概一个多月。这次更新正好在3月17日完成打包&#xff0c…

2026/10/21 5:50:19 阅读更多 →
基于CNN卷积神经网络的辣椒类别识别:高性价比计算机视觉毕设实战指南

基于CNN卷积神经网络的辣椒类别识别:高性价比计算机视觉毕设实战指南

每年开题季,都会有一批同学卡在同一个位置上:不想做MNIST手写数字、猫狗分类这种已经被写烂了的题目,又不敢直接挑战语义分割、目标检测这类工程量大得吓人的方向。如果你刚好在这个路口纠结,我推荐一个性价比非常高的选择——基于…

2026/10/21 5:50:19 阅读更多 →
自主移动机器人建图导航实战:lingbot-map模块化方案全解析

自主移动机器人建图导航实战:lingbot-map模块化方案全解析

做自主移动机器人,最磨人的往往不是底盘控制,也不是避障算法,而是那张地图。很多人以为“地图”就是雷达扫一圈输出一张图,实际上它背后牵扯坐标变换、传感器标定、回环检测、粒子滤波、代价地图膨胀这一整条链路。lingbot-map 这…

2026/10/21 5:50:18 阅读更多 →
Elasticsearch集群安全配置:TLS/SSL与密钥库管理全解析

Elasticsearch集群安全配置:TLS/SSL与密钥库管理全解析

给Elasticsearch集群做安全配置这件事,远比想象中麻烦。很多人以为在elasticsearch.yml里加几行TLS/SSL配置就能收工,结果往往是节点之间互相不认证书、Kibana连不上、客户端报handshake failed,最后只能回滚。我这次把一套三节点ES集群从裸H…

2026/10/21 5:49:18 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →