1. 栈简介
- “先入后出” 先入栈的数据 后出栈 可以形象的称之为“煤球炉”
JavaScript中没有栈 ,但我们可以用JavaScript中的Array实现栈的所有功能
2. 栈在JavaScript中的应用
2.1 场景一 : 十进制转二进制数
- 如图所示 先除尽的余数 写在二进制数的最后一位
- 就好像 先除尽的数入栈 出栈的时候后出
2.2 场景二: 有效的括号
(((()))
-
左括号 入栈 右括号 出栈 栈空即为有效的括号
-
详情lLetcode 20. 有效的括号 - 力扣(LeetCode) (leetcode-cn.com)
-
题目描述
-
-
实现代码
-
/** * @param {string} s * @return {boolean} */ var isValid = function(s) { if( s %2 === 1){ return false }; let stack = []; for(let i =0 ; i < s.length ; i++){ if(s[i] === "(" || s[i] === "{" || s[i] === "["){ stack.push(s[i]); }else{ let c = stack[stack.length - 1]; if((s[i] === ")" && c === '(') || (s[i] === "}" && c === '{') || (s[i] === "]" && c === '[')){ stack.pop(); }else{ return false } } } return stack.length === 0 ; }; -
小结
- 通过栈先入后出的特性
- 将前半截括弧放入栈中
- 后半截括弧与栈顶比较 符合则出栈
- 最终使栈为空时 达到true
-
2.3 函数调用堆栈
-
JS解释器 利用栈来控制函数的调用顺序 -
实例
-
const a = () =>{ b() }; const b = () =>{ c() }; const c = () =>{} a(); -
当我们执行a() 函数时
-
函数的堆栈
- 入栈
- 出栈
- 入栈
-
3. 小结
-
栈是一个先进后出的数据结构
-
JavaScript 中没有栈 但是
Array实现了栈的所有功能 -
栈的常用操作
-
push入栈 -
pop出栈 -
stack[stack.length - 1]栈顶
-
参考文献
- lewis 《JavaScript版数据结构与算法》系列课程