数据结构-栈/队列

在上一篇文章中我们用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();
  }
相关推荐
星释29 分钟前
Rust 练习册 67:自定义集合与数据结构实现
数据结构·算法·rust
2301_807997382 小时前
代码随想录-day47
数据结构·c++·算法·leetcode
别动哪条鱼2 小时前
FFmpeg 核心数据结构关系图
数据结构·ffmpeg
小龙报2 小时前
《算法通关指南数据结构和算法篇(2)--- 链表专题》
c语言·数据结构·c++·算法·链表·学习方法·visual studio
万物挽挽2 小时前
数据结构概述
数据结构
wangwangmoon_light3 小时前
1.10 数据结构之图
数据结构
星轨初途4 小时前
数据结构排序算法详解(2)——选择排序(附动图)
c语言·数据结构·经验分享·笔记·b树·算法·排序算法
Chance_to_win6 小时前
数据结构之排序
数据结构
小年糕是糕手6 小时前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
kupeThinkPoem7 小时前
跳表有哪些算法?
数据结构·算法