JavaScript数据结构与算法 -- 栈结构

108 阅读1分钟

栈结构应用

栈的规则

  • 栈遵循后进先出的规则 last in first out
  • 新的元素进入 称为 进栈 压栈 新的元素放在栈顶上面
  • 删除称为 退栈 出栈,将栈顶元素删除
  • 类似生活中的自助餐托盘,后放上去的总是被先拿走

函数调用栈

  • A函数调用B函数 会将B函数压入栈顶,A在栈底
  • B函数没有执行完就不会弹出栈,此时B函数调用C函数,C函数压入栈顶
  • 当前顺序为 栈底A > B > C栈顶
  • C执行完,弹出栈,依次为 C > B > A
  • 递归会一直调用,无法弹出栈,所以为导致栈溢出

面试题

有6个元素,6/5/4/3/2/1的顺序进栈,下列哪一个不是合法的出栈顺序( )

A. 5 4 3 6 1 2 B. 4 5 3 2 1 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6

栈结构实现

栈的封装

  // 基于数组
function Stack (){
  //栈中的属性
  this.items = []
}
// 使用栈
const s = new Stack()

// 栈的操作
 s.items.push()
 s.items.pop()
  //...

栈的使用

// 10 进制 转 2 进制
function to2(parms) {
  let stk = []
  while (parms > 0) {
    stk.push(parms % 2)
    parms = Math.floor(parms / 2)
  }
  let str = ""
  while (stk.length !== 0) {

    str += stk.pop()
  }
  return str
}
console.log(to2(100))