news 2026/4/23 3:08:22

数据结构:(二)逻辑之门——栈与队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构:(二)逻辑之门——栈与队列

一、 栈 (Stack):最后进,最先出

栈是仅限在栈顶(Top)进行插入或删除操作的线性表。其核心特性是LIFO (Last In First Out)

1. 顺序栈的指针含义

在 C 语言实现中,top指针的定义至关重要。

  • 习惯定义top指向栈顶元素的下一个位置

  • 空栈条件S.top == S.base

  • 满栈条件S.top - S.base >= S.stacksize

2. 核心算法:入栈与出栈

// 入栈 (Push) Status Push(SqStack &S, ElemType e) { if (S.top - S.base >= S.stacksize) return ERROR; // 满栈 *S.top++ = e; // 先把 e 放入 top 指向的位置,然后 top 指针自增 1 return OK; } // 出栈 (Pop) Status Pop(SqStack &S, ElemType &e) { if (S.top == S.base) return ERROR; // 空栈 e = *--S.top; // top 先减 1 指向栈顶元素,再取出赋值给 e return OK; }

二、 栈的顶级应用:括号匹配 (Parenthesis Matching)

这是一个典型的“后进先出”场景:最后出现的左括号,必须最先被匹配掉。

算法精髓:

  1. 遇到左括号:它是期待被匹配的,先“存”起来 ——压栈

  2. 遇到右括号:它来寻找匹配对象,找谁?找最近出现的那个左括号 ——弹出栈顶检查

  3. 匹配失败的三种情况

    • 遇到右括号但栈已空(右括号多余)。

    • 弹出的左括号与当前右括号不匹配(如[))。

    • 遍历结束但栈不为空(左括号多余)。


三、 队列 (Queue):先进先出,公平至上

队列是只允许在队尾 (Rear)插入、队头 (Front)删除的线性表。其特性是FIFO (First In First Out)

1. 循环队列 (Circular Queue):解决“假溢出”

在顺序存储下,随着出队入队,指针会一直向后移动直到超出界限。为了重复利用空间,我们将数组想象成一个“环”。

  • 核心公式:利用模运算%

  • 指针后移i = (i + 1) % MAXSIZE;

2. 难点:如何区分队空还是队满?

front == rear时,队列可能空也可能满。

严版教材方案:牺牲一个单元。

  • 队空Q.front == Q.rear

  • 队满(Q.rear + 1) % MAXSIZE == Q.front

  • 队列长度计算(高频考点):(Q.rear - Q.front + MAXSIZE) % MAXSIZE


四、 深度复盘:递归与栈的灵魂绑定

很多初学者不理解为什么递归需要栈。

详细注释

当一个函数(调用者)调用另一个函数(被调用者)时,系统必须保存调用者的“断点”信息(局部变量、返回地址等)。这些信息被压入系统栈。被调用者执行完后,从栈顶弹出信息恢复调用者。

递归就是一种特殊的嵌套调用,它不断地把每一层的信息压栈。如果递归没有出口,栈就会被撑爆,产生著名的Stack Overflow错误。


五、 今日对比小结

结构逻辑规则插入/删除位置典型应用
LIFO都在栈顶括号匹配、表达式求值、递归
队列FIFO队尾入、队头出打印机任务、缓冲区、BFS(广搜)

今日踩坑提醒:

  • 顺序栈Pop时,指针是先自减还是先取值?一定要看top的初始定义。

  • 循环队列的MAXSIZE并不是实际能存的元素个数,如果采取“牺牲一个单元”法,只能存MAXSIZE - 1个。


明日预告:第四章 串——深入浅出 KMP 算法,彻底搞定next数组推导!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:29:40

基于Python的购物管理系统(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计实现基于Python的购物管理系统,聚焦中小型商家线上线下一体化经营需求,覆盖商品管理、订单处理、库存管控、用户运营及数据统计核心场景,破解传统购物管理流程繁琐、数据不同步、库存易积压等痛点,构建高效…

作者头像 李华
网站建设 2026/4/23 13:57:06

“梦回汉唐”汉服商城网站的设计与实现(11823)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/23 13:54:51

Thinkphp和Laravel物流仓储进销存信息运输管理系统_ho5g5_

目录 ThinkPHP与Laravel物流仓储进销存系统概述技术架构对比核心功能实现示例扩展性与集成 项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理 ThinkPHP与Laravel物流仓储进销存系统概述 物流仓储进销存管理系统是基于PHP框架(如ThinkPH…

作者头像 李华
网站建设 2026/4/23 12:30:28

2026毕设ssm+vue旅游服务与管理论文+程序

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。 系统程序文件列表 开题报告内容 一、选题背景 关于旅游信息化管理问题的研究,现有研究主要以传统OTA平台(如携程、飞猪等)的功能优…

作者头像 李华
网站建设 2026/4/23 13:55:01

用MATLAB玩转噪声信号与数字滤波器

MATLAB 数字信号处理 滤波器 低通滤波器 巴特沃斯滤波器 fir滤波器 iir滤波器 信号与系统 通信原理 相关实验和仿真 模拟系统调制解调仿真音频信号处理 脉冲压缩技术 GUI界面设计低通高通带通滤波器matlab 通信原理 信号的调制解调 AM调制解调 FM调制解调 基带信号调制 余弦滚降…

作者头像 李华
网站建设 2026/4/22 23:42:31

Vue 3 缓存策略详解

Vue3缓存策略全面解析:从组件级到响应式系统的优化方案Vue3提供了多层次的缓存机制,主要包括:组件级缓存:通过KeepAlive组件实现动态组件缓存,支持LRU策略和精确控制计算属性缓存:自动缓存计算结果&#xf…

作者头像 李华