内容大纲

huan_kong

295字小于1分钟

2023-11-21

介绍

image-20231121135308590

栈结构只能在栈顶插入或取出数据, 不能在任意位置插入数据

提示

插入数据也称为进栈/压栈/入栈

删除/取出数据也称为出栈/退栈

也就是后进先出(LIFOL: last in first out)

优点: 提供后进先出的存储方式, 添加速度快, 允许重复

缺点: 只能在一头操作数据, 存取其他项很慢

小测验

image-20231121141957632

不是一次性压入这6个元素, 可以同时出或者入

A

压6, 压5, 出5, 压4, 出4, 压3, 出3, 出6, 压2, 压1, 出1, 出2

B

压6, 压5, 压4, 出4, 出5, 压3, 出3, 压2, 出2, 压1, 出1, 出6

C

压6, 压5, 压4, 压3, 出3, 出4,

出不来了, 因为需要先出5才能出6

D

压6, 压5, 压4, 压3, 压2, 出2, 出3, 出4, 压1, 出1, 出5, 出6

TS实现

class Stack {
  #value = []

  push(val: any) {
    return this.#value.push(val)
  }
  pop() {
    return this.#value.pop()
  }
  peek() {
    return this.#value[this.#value.length - 1]
  }
  isEmpty() {
    return this.#value.length === 0
  }
  size() {
    return this.#value.length
  }
  toString() {
    return this.#value.toString()
  }
}

案例

使用 实现 十进制二进制

function dec2bin(number: number) {
  const stack = new Stack()
  while (number > 0) {
    stack.push(number % 2)
    number = Math.floor(number / 2)
  }

  let bin = ''
  while (!stack.isEmpty()) {
    bin += stack.pop()
  }
  return bin
}