栈是什么?

  • 栈是一种常用的数据结构,后进先出
  • JavaScript 中没有栈,可以用 Array 实现

栈的相关操作

  • 入栈:arr.push('a')
  • 出栈:arr.pop()移除数组最后一个元素并返回
  • 栈顶元素:arr[arr.length - 1]

栈的使用场景及常见的算法题(LeetCode)

  • 十进制转二进制
    • 后出来的余数反而要排到前面
    • 把余数依次入栈,然后再出栈,就可以实现余数倒序输出
  • 20.判断字符串括号是否有效
    • 入栈左括号,遇到右括号就出栈,栈空了为有效括号
  • 682.棒球比赛
  • 155.最小栈 - 注意 this 的用法

image.png
image.png

  1. 所以,我们可以创建两个栈,一个栈是主栈 stackstack,另一个是辅助栈 minStackminStack,用于存放对应主栈不同时期的最小值。
  2. var MinStack = function() {
  3. this.x_stack = [];
  4. // 初始化放入无穷大,最小栈的最后一个元素永远最小
  5. this.min_stack = [Infinity];
  6. };
  7. MinStack.prototype.push = function(x) {
  8. this.x_stack.push(x);
  9. // 存入当前栈中最小值,可以重复
  10. this.min_stack.push(Math.min(this.min_stack[this.min_stack.length - 1], x));
  11. };
  12. MinStack.prototype.pop = function() {
  13. this.x_stack.pop();
  14. this.min_stack.pop();
  15. };
  16. MinStack.prototype.top = function() {
  17. return this.x_stack[this.x_stack.length - 1];
  18. };
  19. MinStack.prototype.getMin = function() {
  20. return this.min_stack[this.min_stack.length - 1];
  21. };

栈在前端中的应用

  • 函数调用堆栈