一、栈简介
- 栈其实就是一个后进先出的结构,类似于生活中的一桶羽毛球,一个一个装成桶,最后放进去的却要第一个被拿出来。
- 在JavaScript中其实没有栈,但是我们可以用Array实现栈的所有功能
二、栈的基本操作
const stack = []
stack.push(1) //入栈操作
stack.pop() //出栈操作
const top = stack[stack.length - 1] //获取栈顶元素
三、栈的应用场景
- 一句废话,就是所有需要后进先出的场景,我们都可以用栈,所以我们需要明白的就是,哪些场景是后进先出的,举个例子:
- 十进制转二进制(余数先入栈,在出站,就是我们想要的二进制)
- 函数调用堆栈调用
- 有效的括号类问题
四、leetcode20 有效的括号
- 这道题就是栈的一个应用场景
- 新建一个栈
- 遍历字符串,首先是遇到左括号我们就执行入栈操作,遇到右括号就与栈顶元素作比较,如果能成功匹配就执行出栈操作, 不能就返回false
- 最后考虑边界情况
- 时间复杂度和空间复杂度都是O(n)
- 其实这道题目还有其他解法,比如用字典(学习map时会写出答案)