定义

后进者先出,先进者后出。eg: 平时放餐盘,是从下往上一个个放,然后从上往下一个个取。不会直接从中间抽离一个出来

操作特性

“操作受限”的线性表,只允许在一端插入和删除数据。相比于数据结构:数组数据结构:链表,更少的操作结构,意味着更加可控,不易出错的状态。

顺序栈:由数组实现的栈

class ArrayStack {
  private items: string[]; // 数组
  private count: number; // 栈中元素的数量
  private n: number; // 栈的大小
 
  // 初始化数组,申请一个大小为 n 的数组空间
  constructor(n: number) {
    this.items = [];
    this.count = 0;
    this.n = n;
  }
 
  // 入栈操作
  push(element: string): boolean {
    // 数组空间不够了,直接返回 false,入栈失败
    if (this.count === this.n) return false;
    // 将 item 放到下标为 count 的位置,并且 count 加一
    this.items[this.count] = element;
    this.count++;
    return true;
  }
 
  // 出栈操作
  pop(): string | null {
    // 栈为空,则直接返回 nukk
    if (this.count === 0) return null;
    // 返回下标为 count-1 的数组元素,并且栈中元素个数 count 减一
    const tmp = this.items[this.count - 1];
    this.count--;
    return tmp;
  }
}

应用

  • 函数调用栈
  • 表达式求知
  • 括号匹配
  • 浏览器的前进后退