Skip to content

栈(Stack)结构

核心特性

先进后出(LIFO):仅操作栈顶元素(最后入栈的元素先出栈)

核心操作:入栈(push)、出栈(pop)、查看栈顶(peek)、判断空(isEmpty)

代码实现

js
class Stack {
  constructor() {
    this.items = []; // 基于数组存储数据
  }

  // 入栈(添加元素到栈顶)
  push(item) {
    this.items.push(item);
  }

  // 出栈(删除并返回栈顶元素)
  pop() {
    if (this.isEmpty()) return null;
    return this.items.pop();
  }

  // 查看栈顶元素(不删除)
  peek() {
    if (this.isEmpty()) return null;
    return this.items[this.items.length - 1];
  }

  // 判断栈是否为空
  isEmpty() {
    return this.items.length === 0;
  }

  // 获取栈的大小
  size() {
    return this.items.length;
  }

  // 清空栈
  clear() {
    this.items = [];
  }
}

适用场景

函数调用栈:JS 引擎用栈管理函数调用(如递归调用时,每次递归入栈,返回时出栈)

路由回退:const historyStack = new Stack()(push 当前路由,回退时 pop 上一个路由)

注意

基于数组实现的栈,push/pop是 O (1),若用unshift/shift(操作栈底)会变成 O (n),不推荐