第三篇:栈

76 阅读1分钟

概念

一个后进先出的数据结构

屏幕截图 2022-05-07 115224.png
通俗来讲,就像一个蜂窝煤炉,蜂窝煤先进去的在最底下,最后进去的在最上面,并且最后一个是第一个被拿出来的(后进先出),往进放的动作叫push,拿出去的叫pop。

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

VSCODE 调试

屏幕截图 2022-05-07 172541.png

  • 0: 代表跳到下一个断点
  • 1:代表一行一行执行
  • 2:代表 如果当前行里面有函数,可以进入函数调试
  • 3:代表 与2相对应的跳出当前函数,比如进入某个函数调试了,想跳出函数就用3
  • 4:代表重启整个脚本文件,重新调试一遍

应用场景

需要后进先出的场景

十进制转二进制

  • 后进来的余数反而要排到最前面
  • 把余数依次入栈,然后再出栈,就可以得到余数倒叙输出

屏幕截图 2022-05-07 173758.png

有效的括号 LeetCode 20

  • 越靠右的左括号,对应的右括号越靠前
  • 左括号入栈,右括号出栈,最后栈空了就合法
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s.length % 2 === 1 || /\)|\]|\}/.test(s[0])) return false;
    const stack = [];

    for(let i = 0; i < s.length; i++) {
        const temp = s[i];
        if (/\(|\[|\{/.test(temp)) {
            stack.push(temp);
        } else {
            const t = stack[stack.length - 1];
            if (
                (t === "(" && temp === ")") ||
                (t === "[" && temp === "]") ||
                (t === "{" && temp === "}")
            ) {
                stack.pop();
            } else {
                return false;
            }
        }
    }

    return stack.length === 0;
};

函数调用堆栈

  • 最后调用的函数,最先执行完
  • JS解析器使用栈来控制函数的调用顺序