利用JS实现栈

73 阅读1分钟

栈(stack)

  • 它是一种运算受限的线性表;
  • 遵循后进先出(LIFO);
  • 新添加或者待删除的元素都保存在栈顶,另一端就叫做栈底;
  • 在栈里,新元素都靠近栈顶,旧元素都接近栈底。

栈的方法

  • push() 添加一个或多个元素到栈顶;
  • pop() 删除栈顶的元素,并返回移除的元素;
  • peek() 返回栈顶的元素
  • isEmpty() 用于判断栈是否为空
  • clear() 用于清空栈的元素
  • size() 用于返回栈中元素的个数

栈的实现

利用JS实现一个基于数组的栈

class ArrayStack {
  constructor() {
    this.items = [];
  }
  // 添加元素到栈顶
  push(element) {
    this.items.push(element);
  }
  // 删除栈底的元素
  pop() {
    return this.items.pop();
  }
  // 返回栈顶的元素
  peek() {
    return this.items[this.items.length - 1];
  }
  // 判断栈里还有没有元素
  isEmpty() {
    return this.items.length === 0;
  }
  // 移除栈里所有的元素
  clear() {
    this.items = [];
  }
  // 返回栈里的元素个数
  size() {
    return this.items.length;
  }
}

利用JS实现一个基于对象的栈

class ObjectStack {
  constructor() {
    this.items = {};
    this.count = 0;
  }
  // 添加元素
  push(element) {
    this.items[this.count] = element;
    this.count++;
  }
  // 删除元素
  pop() {
    if (this.isEmpty()) {
        return undefined;
    }
    this.count--;
    const result = this.items[this.count];
    delete this.items[this.count];
    return result;
  }
  // 返回栈顶的元素
  peek() {
    if (this.isEmpty()) {
        return undefined;
    }
    return this.items[this.count - 1];
  }
  // 判断栈里是否还有元素
  isEmpty() {
    return this.count === 0;
  }
  // 移除栈里的所有元素
  clear() {
    this.items = {};
    this.count = 0;
  }
  // 返回栈里的元素个数
  size() {
    return this.count;
  }
}