Jex

【JS】手写之实现栈

/**
 * 栈模型
 * 栈(stack)是限制插入和删除只能在一个位置上进行的表
 * 该位置是表的末端叫做栈的顶(top)
 * 对栈的基本操作有 push 进栈和 pop 出栈,前者相当于插入,后者则是删除最后插入的元素
 */
class Stack {
  constructor() {
    /** 栈数据 */
    this.items = [];
    /** 记录栈顶位置 */
    this.top = 0;
  }

  /** 进栈 */
  push(element) {
    this.items[this.top++] = element;
  }

  /** 出栈 */
  pop() {
    return this.items[--this.top];
  }

  /** 查看栈顶元素 */
  peek() {
    if (this.isEmpty) return "Empty";
    return this.dataStore[this.top - 1];
  }

  /** 返回栈内元素总数 */
  get length() {
    return this.items.length;
  }

  /** 判断是否空栈 */
  get isEmpty() {
    return !this.items.length;
  }

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

// 初始化一个栈
var stack = new Stack();
stack.push(1);
stack.push(2);
stack.pop();
stack.push(4);
console.log(stack);
console.log(stack.isEmpty);
console.log(stack.length);