当前位置:首页 > PHP

php实现一个双向队列

2026-01-28 21:43:35PHP

PHP 实现双向队列

双向队列(Deque)是一种允许在队列两端进行插入和删除操作的线性数据结构。PHP 可以通过数组或 SplDoublyLinkedList 类实现双向队列。

使用数组实现双向队列

数组是 PHP 中最基础的数据结构,可以通过 array_pusharray_poparray_shiftarray_unshift 实现双向队列的基本操作。

class Deque {
    private $queue = [];

    // 从队首插入元素
    public function addFront($item) {
        array_unshift($this->queue, $item);
    }

    // 从队尾插入元素
    public function addRear($item) {
        array_push($this->queue, $item);
    }

    // 从队首删除元素
    public function removeFront() {
        if ($this->isEmpty()) {
            return null;
        }
        return array_shift($this->queue);
    }

    // 从队尾删除元素
    public function removeRear() {
        if ($this->isEmpty()) {
            return null;
        }
        return array_pop($this->queue);
    }

    // 检查队列是否为空
    public function isEmpty() {
        return empty($this->queue);
    }

    // 获取队列大小
    public function size() {
        return count($this->queue);
    }
}

使用 SplDoublyLinkedList 实现双向队列

PHP 的 SPL(标准 PHP 库)提供了 SplDoublyLinkedList 类,可以高效地实现双向队列。

class Deque {
    private $list;

    public function __construct() {
        $this->list = new SplDoublyLinkedList();
    }

    // 从队首插入元素
    public function addFront($item) {
        $this->list->unshift($item);
    }

    // 从队尾插入元素
    public function addRear($item) {
        $this->list->push($item);
    }

    // 从队首删除元素
    public function removeFront() {
        if ($this->isEmpty()) {
            return null;
        }
        return $this->list->shift();
    }

    // 从队尾删除元素
    public function removeRear() {
        if ($this->isEmpty()) {
            return null;
        }
        return $this->list->pop();
    }

    // 检查队列是否为空
    public function isEmpty() {
        return $this->list->isEmpty();
    }

    // 获取队列大小
    public function size() {
        return $this->list->count();
    }
}

示例用法

$deque = new Deque();
$deque->addFront(1);   // 队列: [1]
$deque->addRear(2);    // 队列: [1, 2]
$deque->addFront(3);   // 队列: [3, 1, 2]

echo $deque->removeFront(); // 输出 3
echo $deque->removeRear();  // 输出 2

性能比较

  • 数组实现:简单直观,但在队首插入或删除元素时,array_unshiftarray_shift 的时间复杂度为 O(n),因为需要重新索引数组。
  • SplDoublyLinkedList 实现:操作的时间复杂度均为 O(1),性能更高,适合频繁的双端操作。

如果需要高性能的双向队列,推荐使用 SplDoublyLinkedList

php实现一个双向队列

标签: 队列双向
分享给朋友:

相关文章

vue数据实现双向绑定

vue数据实现双向绑定

Vue 数据双向绑定的实现原理 Vue 的数据双向绑定主要通过 v-model 指令实现,结合了数据绑定和事件监听。以下是核心实现方式: 使用 v-model 指令 v-model 是语法糖,自动绑…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php redis 队列实现

php redis 队列实现

PHP Redis 队列实现 Redis 是一个高性能的键值存储系统,常被用作消息队列。以下是使用 PHP 和 Redis 实现队列的几种方法。 安装依赖 确保已安装 PHP Redis 扩展。可…

php 消息队列 实现

php 消息队列 实现

PHP 消息队列实现方法 使用 Redis 实现消息队列 Redis 的 LPUSH 和 BRPOP 命令可以轻松实现消息队列功能。生产者通过 LPUSH 将消息推入队列,消费者通过 BRPOP…

vue实现队列消息

vue实现队列消息

Vue 实现队列消息 在 Vue 中实现队列消息功能,可以通过以下方法实现一个简单的消息队列系统,用于显示和管理临时通知(如成功、错误提示)。 使用 Vuex 管理消息队列 创建一个 Vuex s…

vue实现双向滚动

vue实现双向滚动

实现双向滚动的 Vue 方法 双向滚动通常指两个关联的滚动区域(如表格的头部和内容部分)同步滚动。以下是几种实现方式: 使用事件监听和 scroll 方法 通过监听一个滚动区域的 scrol…