概念
一个后进先出的数据结构
通俗来讲,就像一个蜂窝煤炉,蜂窝煤先进去的在最底下,最后进去的在最上面,并且最后一个是第一个被拿出来的(后进先出),往进放的动作叫push,拿出去的叫pop。
JavaScript中没有栈,但是可以用Array类型实现栈的所有功能。
VSCODE 调试
- 0: 代表跳到下一个断点
- 1:代表一行一行执行
- 2:代表 如果当前行里面有函数,可以进入函数调试
- 3:代表 与2相对应的跳出当前函数,比如进入某个函数调试了,想跳出函数就用3
- 4:代表重启整个脚本文件,重新调试一遍
应用场景
需要后进先出的场景
十进制转二进制
- 后进来的余数反而要排到最前面
- 把余数依次入栈,然后再出栈,就可以得到余数倒叙输出
有效的括号 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解析器使用栈来控制函数的调用顺序