从栈的操作特性上来看,栈是⼀种“操作受限”的线性表,只⽀持两个基本操作:⼊栈push()
和出栈pop()
。还有一个老生常谈的问题是,访问任何数据结构前,都需要先进行预判访问是否合法。栈的应用场景有很多,例如函数调⽤、括号匹配、表达式求值等。
常见的表达式有:
- 前缀表达式,对应树的先序遍历,符合程序中调用函数的写法
- 后缀表达式,对应树的后序遍历,适合用栈模拟的最近相关性
- 中缀表达式,对应树的后序遍历,需要括号表示计算的优先级
刷题清单 | 备注 |
---|---|
20.有效的括号 | 每个右括号只与最邻近的左括号匹配 |
1047. 删除字符串中的所有相邻重复项 | 考虑用StringBuilder/char[] 模拟栈 |
155.最小栈 | 记录历史前缀最小值 |
150.逆波兰表达式求值 | 每个操作符只与最近两个操作数匹配 |
227.中缀转后缀 | 操作符需要比对邻近历史操作符的优先级 |
224.基本计算器 |