二、数据结构之"栈"

110 阅读1分钟

1.栈是什么?

image.png

  • 栈就是一个后进先出的数据结构
  • JavaScript 中没有栈,但是可以使用Array实现栈的所有功能
  • Java中有栈数据结构的
  • 在编辑器中鼠标左键打断点,按F5 选择 Node.js 即可调试 image.png

image.png

// stack 就是栈的意思  这里使用数组来模拟入栈出栈
const stack = [];
// 入栈
stack.push('a')
stack.push('b')

// 出栈
const a1 = stack.pop()
const a2 = stack.pop()

2.什么场景下使用栈?

  • 所有需要后进先出的场景
    1. 十进制转二进制
    1. 判断字符串的括号是否有效
    1. 函数调用堆栈...

场景一: 十进制转二进制

image.png

1. 输出 100011
2. 后出来的余数反而要排到前面
3. 把余数依次入栈,然后出栈,就可以实现余数的倒序输出.

场景二: 有效的括号

image.png

1.越靠后的左括号,对应的右括号越靠前
2.左括号入栈,右括号出栈,最后栈空了就是合法的

场景三: 函数调用堆栈

  • 对于相互调用函数而言,最后被调用的函数,会最先执行完
  • 第一个调用的fn1
  • 在fn1中调用了 sayHi()
  • 在后面的sayHi()先执行的
  • 只有在sayHi()执行完成之后才能执行fn1
  • 一前一后,这不就是后进先出,可以用栈来控制
  • js解释器使用栈来控制函数的调用顺序
1. 可以看到在最底部 调用了fn1函数
2. 进入之后先执行[1] 代码
3. 然后执行sayHi()
4. 再执行[2] 代码
5. 整个fn1函数执行完成之后
6. 执行[3] 代码
 
function fn1 () {
    // [1]
    sayHi();
    // [2]
}

function sayHi() {
    return 'Hello Hi!'
}

// 调用 fn1 函数
fn1()
// [3]