当前位置:首页 > JavaScript

js实现队列的三种方法

2026-01-31 12:11:57JavaScript

数组实现队列

使用数组的 pushshift 方法模拟队列的先进先出特性。

class ArrayQueue {
  constructor() {
    this.items = [];
  }
  enqueue(element) {
    this.items.push(element);
  }
  dequeue() {
    return this.items.shift();
  }
  peek() {
    return this.items[0];
  }
  isEmpty() {
    return this.items.length === 0;
  }
  size() {
    return this.items.length;
  }
}

缺点shift() 操作的时间复杂度为 O(n),频繁出队时性能较差。

js实现队列的三种方法

链表实现队列

通过链表节点实现高效的头尾操作,避免数组的频繁位移。

js实现队列的三种方法

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

class LinkedListQueue {
  constructor() {
    this.head = null;
    this.tail = null;
    this.length = 0;
  }
  enqueue(value) {
    const node = new Node(value);
    if (!this.head) {
      this.head = node;
      this.tail = node;
    } else {
      this.tail.next = node;
      this.tail = node;
    }
    this.length++;
  }
  dequeue() {
    if (!this.head) return null;
    const value = this.head.value;
    this.head = this.head.next;
    this.length--;
    if (this.length === 0) this.tail = null;
    return value;
  }
  peek() {
    return this.head?.value;
  }
  isEmpty() {
    return this.length === 0;
  }
}

优点enqueuedequeue 的时间复杂度均为 O(1)。

双栈实现队列

利用两个栈模拟队列行为,通过反转栈顺序实现先进先出。

class StackQueue {
  constructor() {
    this.inStack = [];
    this.outStack = [];
  }
  enqueue(element) {
    this.inStack.push(element);
  }
  dequeue() {
    if (this.outStack.length === 0) {
      while (this.inStack.length > 0) {
        this.outStack.push(this.inStack.pop());
      }
    }
    return this.outStack.pop();
  }
  peek() {
    if (this.outStack.length === 0) {
      while (this.inStack.length > 0) {
        this.outStack.push(this.inStack.pop());
      }
    }
    return this.outStack[this.outStack.length - 1];
  }
  isEmpty() {
    return this.inStack.length === 0 && this.outStack.length === 0;
  }
}

特点:摊还时间复杂度为 O(1),适合需要兼顾入队和出队性能的场景。

标签: 三种队列
分享给朋友:

相关文章

php实现双向队列

php实现双向队列

PHP 实现双向队列的方法 双向队列(Deque,Double-ended Queue)是一种允许在队列两端进行插入和删除操作的数据结构。PHP 中可以通过数组或 SplDoublyLinkedLis…

vue队列实现播放

vue队列实现播放

Vue 队列播放实现方法 在 Vue 中实现队列播放功能,可以通过以下方式完成: 使用数组管理队列 定义一个数组来存储待播放的项目,利用数组的 push 和 shift 方法实现队列的先进先出特性…

php实现redis消息队列

php实现redis消息队列

安装 Redis 扩展 确保 PHP 已安装 Redis 扩展。可以通过以下命令安装: pecl install redis 在 php.ini 中添加 extension=redis.so 并重启…

php数组实现队列

php数组实现队列

使用数组实现队列的基本方法 在PHP中,数组可以模拟队列的先进先出(FIFO)特性。通过内置的数组函数,可以轻松实现队列的基本操作。 初始化队列 $queue = []; 入队操作(enque…

php队列实现

php队列实现

PHP 队列实现方法 PHP 队列实现可以通过多种方式完成,以下是几种常见的方法: 使用数据库实现队列 创建数据库表存储队列任务,包含字段如 id, payload, status, create…

php    队列实现

php 队列实现

队列的基本概念 队列是一种先进先出(FIFO)的数据结构,元素从队尾入队,从队头出队。PHP中可以通过数组或SplQueue类实现队列功能。 使用数组实现队列 PHP数组提供了array_push和…