栈(Stack)
特殊线性表,就有先进后出的特性,只能在一端进行操作。
核心代码
import { ErrorEnum, ERROR_EMPTY_ELEMENT, throwError } from '@/shared';
export interface IStack<T> {
  /** 栈内元素数量 */
  size: number;
  /** 栈顶元素 */
  top(): T;
  /** 入栈 */
  push(val: T): void;
  /** 出栈 */
  pop(): T;
}
export class Stack<T> implements IStack<T> {
  private list: T[] = [];
  get size() {
    return this.list.length;
  }
  top(): T {
    this.checkRange();
    return this.list[this.size - 1];
  }
  push(val: T): void {
    this.list.push(val);
  }
  pop(): T {
    this.checkRange();
    return this.list.pop()!;
  }
  private checkRange() {
    if (this.size === 0) {
      throwError(ERROR_EMPTY_ELEMENT, ErrorEnum.range);
    }
  }
}