JavaScript 数据结构 栈

911 阅读1分钟

1. 栈简介

5ae7cca2db8232624b4bb8cd511eba95

  • “先入后出” 先入栈的数据 后出栈 可以形象的称之为“煤球炉”
  • JavaScript中没有栈 ,但我们可以用JavaScript中的Array 实现栈的所有功能

2. 栈在JavaScript中的应用

2.1 场景一 : 十进制转二进制数

54fbb2fb43166d223899e186462309f79052d232

  • 如图所示 除尽的余数 写在二进制数的最一位
  • 就好像 先除尽的数入栈 出栈的时候后出

2.2 场景二: 有效的括号

(((()))
  • 左括号 入栈 右括号 出栈 栈空即为有效的括号

  • 详情lLetcode 20. 有效的括号 - 力扣(LeetCode) (leetcode-cn.com)

  • 题目描述

    • image-20211006130709174

    • 实现代码

    •    
      /**
       * @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() 函数时

    • 函数的堆栈

      • 入栈image-20211006132044604
      • 出栈image-20211006132142766image-20211006132206703

3. 小结

  • 栈是一个先进后出的数据结构

  • JavaScript 中没有栈 但是 Array实现了栈的所有功能

  • 栈的常用操作

    • push 入栈

    • pop 出栈

    • stack[stack.length - 1] 栈顶

参考文献

  • lewis 《JavaScript版数据结构与算法》系列课程