当前位置: 首页 > article >正文

【数据结构】线性数据结构——栈

1. 定义

栈(Stack)是一种线性数据结构,它遵循**后进先出(LIFO,Last In First Out)**的原则。也就是说,最后被插入的元素最先被取出。栈只允许在一端(栈顶,Top)进行数据的插入和删除操作。

2. 特点

  • 后进先出: 最后加入栈的元素最先被移除。

  • 受限操作: 栈只允许在栈顶进行插入(Push)和删除(Pop)操作。

  • 只能访问栈顶元素: 通过 Peek/Top 操作获取栈顶元素,而不移除它。

  • 空栈和栈满的状态: 空栈时无法弹出元素。在固定大小的栈中,栈满时无法继续插入。

3. 栈的基本操作

以C++ 的 STL(标准模板库)提供的 std::stack 类模板为例,以下是栈的常见基本操作:

  • push(value): 将元素压入栈顶。
  • pop(): 弹出栈顶元素(不返回值,只移除)。
  • top(): 获取栈顶元素,但不移除。
  • empty(): 检查栈是否为空,返回 true 或 false。
  • size(): 返回栈中元素的数量。

4. 栈的实现方式

栈可以通过数组或链表实现:

(1) 数组实现栈: 使用一个数组和指针表示栈顶位置。

优点:实现简单。

缺点:需要提前定义数组大小,容量固定,可能浪费空间。

(2) 链表实现栈: 使用链表节点动态存储元素。

优点:可以动态扩展,无需提前定义容量。

缺点:需要额外存储指针,空间效率略低于数组。

5. 栈的应用

栈因其后进先出的特性,在许多场景中非常有用:

  • 括号匹配: 用于判断括号是否成对出现(如 {[()]})。

  • 表达式求值: 中缀表达式转后缀表达式,以及后缀表达式的计算。

  • 函数调用管理: 栈用于保存函数调用的上下文(调用栈)。

  • 深度优先搜索(DFS): 栈用于保存节点的路径。

  • 撤销与恢复操作: 在文本编辑器中,用栈保存用户操作的历史记录,实现撤销功能。


http://www.kler.cn/a/461120.html

相关文章:

  • 基于深度学习算法的AI图像视觉检测
  • Formality:官方Tutorial(一)
  • 【Multisim用74ls92和90做六十进制】2022-6-12
  • kubelet状态错误报错
  • HTTP Scheme 通常指的是在 URL 中用于指定使用 HTTP 协议的方案(scheme)
  • 单片机常用外设开发流程(1)(IMX6ULL为例)
  • 本地部署Hello-Algo打造私人算法教练让算法学习告别网络限制
  • 解构大语言模型(LLM)
  • 如何免费解锁 IPhone 网络
  • 如何使用 ChatGPT Prompts 写学术论文?
  • 嵌入式单片机中SPI外设控制与实现
  • 网神SecFox运维安全管理与审计系统 /authService/login接口反序列化漏洞复现 [附POC]
  • Vue.js组件开发-实现多级菜单
  • want php学习笔记
  • 【mysql】linux安装mysql客户端
  • 计算机体系结构期末考试
  • PDF怎么压缩得又小又清晰?5种PDF压缩方法
  • WPF合并C1FlexGrid表格,根据多列的值进行合并
  • JavaWeb开发(二)IDEA创建Java Web项目并部署及目录结构
  • Applied Spatial Statistics(十三)带有空间平滑器的 GAM
  • 批量新建工作表,带个性化模板一步到位-Excel易用宝
  • 12.29~12.31[net][review]need to recite[part 2]
  • 电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教
  • 【题解】AT_abc386_d AtCoder Beginner Contest 386 D Diagonal Separation
  • 【每日学点鸿蒙知识】List+Swipe滑动冲突、下拉刷新、编译错误定位、监听生命周期、上架应用市场要求
  • 分布饼状图——开发解释——未来之窗行业应用跨平台架构