栈在编码面试中的学习指南

简介

栈是一种抽象数据类型,支持压栈(在栈顶添加新元素)和弹栈(移除并返回最近添加的元素,即栈顶的元素)。作为抽象数据类型,栈可以使用数组或单链表实现。

这种行为通常称为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'