栈在编码面试中的学习指南
简介
栈是一种抽象数据类型,支持压栈(在栈顶添加新元素)和弹栈(移除并返回最近添加的元素,即栈顶的元素)。作为抽象数据类型,栈可以使用数组或单链表实现。
这种行为通常称为LIFO(后进先出)。这种结构类型的名称“栈”来自于物理物品堆叠在一起的类比。
栈是支持嵌套或递归函数调用的重要方式,并用于实现深度优先搜索。深度优先搜索可以使用递归或手动栈来实现。
学习资源
阅读材料
实现
语言 | API |
---|---|
C++ | std::stack |
Java | java.util.Stack |
Python | 使用列表模拟 |
JavaScript | 使用数组模拟 |
时间复杂度
操作 | 大O表示 |
---|---|
顶部/查看 | O(1) |
压入 | O(1) |
弹出 | O(1) |
为空 | O(1) |
搜索 | O(n) |
角案例
- 空栈。从空栈弹出
- 只有一个元素的栈
- 有两个元素的栈
技术
TODO:单调栈
基本问题
这些是你需要练习的基本问题,如果你正在为这个主题学习。
推荐练习问题
这些是在你为这个主题学习和练习了基本问题之后推荐的练习问题。
推荐课程
import AlgorithmCourses from '../_courses/AlgorithmCourses.md'