数据结构-栈/队列

在上一篇文章中我们用ts实现了一个双向链表的功能

在这篇文章中,我们使用ts来实现一个栈结构和队列结构

栈结构

  • 特点 :一种后进先出的操作受限的线性表。只允许在一端(栈顶)进行插入(入栈/Push)和删除(出栈/Pop)操作。
  • 场景:函数调用栈、表达式求值、括号匹配、浏览器前进/后退功能。

对于栈结构里面的元素储存,我们可以使用一个数组来表示

ts 复制代码
class Stack<T> {
  private items: T[];

  constructor() {
    this.items = [];
  }
}

接下来设计栈结构的方法

  1. push(item: T) - 将元素添加到栈顶
  2. pop(): T | undefined - 移除并返回栈顶元素
  3. peek(): T | undefined - 查看栈顶元素而不移除它
  4. isEmpty(): boolean - 检查栈是否为空
  5. size(): number - 获取栈中元素数量
  6. clear(): void - 清空栈
  7. toString(): string - 将栈内容转换为字符串

栈结构代码实现

添加元素

ts 复制代码
  /**
   * 将元素压入栈顶
   * @param item 要添加的元素
   */
  push(item: T): void {
    this.items.push(item);
  }

获取栈顶元素

ts 复制代码
  /**
   * 弹出栈顶元素
   * @returns 栈顶元素或undefined(如果栈为空)
   */
  pop(): T | undefined {
    return this.items.pop();
  }

查看栈顶元素

ts 复制代码
  /**
   * 查看栈顶元素而不移除它
   * @returns 栈顶元素或undefined(如果栈为空)
   */
  peek(): T | undefined {
    return this.items[this.items.length - 1];
  }

其他功能函数

ts 复制代码
  /**
   * 检查栈是否为空
   * @returns 如果栈为空返回true,否则返回false
   */
  isEmpty(): boolean {
    return this.items.length === 0;
  }

  /**
   * 返回栈的大小
   * @returns 栈中元素的数量
   */
  size(): number {
    return this.items.length;
  }

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

  /**
   * 将栈转换为字符串
   * @returns 栈的字符串表示
   */
  toString(): string {
    return this.items.toString();
  }

队列结构

  • 特点 :一种先进先出的操作受限的线性表。只允许在一端(队尾)进行插入(入队/Enqueue),在另一端(队头)进行删除(出队/Dequeue)。

  • 常见变种

    • 双端队列:两端都允许进行插入和删除操作。
    • 优先队列 :出队顺序由元素的"优先级"决定,通常用来实现。
  • 场景:任务调度、消息队列、广度优先搜索(BFS)。

和栈结构类似,对于队列结构里面的元素储存,我们也是使用一个数组来表示

ts 复制代码
class Queue<T> {
  private items: T[];

  constructor() {
    this.items = [];
  }
}

队列内部所包含的方法如下

  1. enqueue(item: T) - 将元素添加到队列末尾
  2. dequeue(): T | undefined - 移除并返回队列的第一个元素
  3. peek(): T | undefined - 查看队列的第一个元素而不移除它
  4. isEmpty(): boolean - 检查队列是否为空
  5. size(): number - 获取队列中元素数量
  6. clear(): void - 清空队列
  7. toString(): string - 将队列内容转换为字符串

队列结构代码实现

添加元素

ts 复制代码
  /**
   * 将元素添加到队列末尾
   * @param item 要添加的元素
   */
  enqueue(item: T): void {
    this.items.push(item);
  }

获取元素

ts 复制代码
  /**
   * 移除并返回队列的第一个元素
   * @returns 队列的第一个元素或undefined(如果队列为空)
   */
  dequeue(): T | undefined {
    return this.items.shift();
  }

查看首个元素

ts 复制代码
  /**
   * 查看队列的第一个元素而不移除它
   * @returns 队列的第一个元素或undefined(如果队列为空)
   */
  peek(): T | undefined {
    return this.items[0];
  }

其他功能函数

ts 复制代码
/**
   * 检查队列是否为空
   * @returns 如果队列为空返回true,否则返回false
   */
  isEmpty(): boolean {
    return this.items.length === 0;
  }

  /**
   * 返回队列的大小
   * @returns 队列中元素的数量
   */
  size(): number {
    return this.items.length;
  }

  /**
   * 清空队列
   */
  clear(): void {
    this.items = [];
  }

  /**
   * 将队列转换为字符串
   * @returns 队列的字符串表示
   */
  toString(): string {
    return this.items.toString();
  }
相关推荐
爱敲代码的TOM5 小时前
数据结构总结
数据结构
皮皮哎哟7 小时前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序
堕2748 小时前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
2302_813806228 小时前
【嵌入式修炼:数据结构篇】——数据结构总结
数据结构
Wei&Yan9 小时前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
long3169 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
张张努力变强12 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
wWYy.12 小时前
数组快排 链表归并
数据结构·链表
李斯啦果12 小时前
【PTA】L1-019 谁先倒
数据结构·算法
Mr Xu_1 天前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构