特点:后进先出。

使用数组模拟栈

JavaScript中没有栈,但是可以用Array实现栈的所有功能。

  1. const stack = [];
  2. // 入栈
  3. stack.push(1);
  4. stack.push(2);
  5. // 出栈
  6. const item1 = stack.pop();
  7. const item2 = stack.pop();

栈的结构很简单,我们重点关注它的后进先出的特性

栈的应用场景

需要先进先出的场景:
比如:
十进制转二进制,判断字符串的括号是否有效,函数调用堆栈……

这三个场景,是典型的后进先出的场景。

算法题

LeetCode:20.有效的括号

分析时间复杂度和空间复杂度

代码中只有一个for循环,
所有操作都是O(1)的复杂度,
所以时间复杂度是O(n)。n就是s.length。

创建了一个stack数组,里面最极端的情况下会存储所有的字符串,占用n个内存单元,所以
空间复杂度是O(n), n就是s.length

继续优化

使用新的数据结构**-“字典”来优化。**
后面讲到了,再来优化。

LeetCode:144. 二叉树的前序遍历

进制转换