当前位置:首页 > PHP

php实现一个双向队列

2026-02-13 19:52:09PHP

双向队列的实现方式

在PHP中,双向队列(Deque)可以通过数组或SplDoublyLinkedList类实现。双向队列允许从队列的前端和后端进行插入和删除操作。

php实现一个双向队列

使用数组实现双向队列

PHP数组本身支持从头部和尾部操作元素,可以通过array_push、array_pop、array_shift和array_unshift函数实现双向队列的基本功能。

php实现一个双向队列

class Deque {
    private $queue = [];

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

    // 从队尾出队
    public function popBack() {
        return array_pop($this->queue);
    }

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

    // 从队首出队
    public function popFront() {
        return array_shift($this->queue);
    }

    // 获取队列元素数量
    public function size() {
        return count($this->queue);
    }

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

使用SplDoublyLinkedList实现双向队列

PHP的SPL(Standard PHP Library)提供了SplDoublyLinkedList类,它原生支持双向队列操作,性能优于数组实现。

class Deque {
    private $list;

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

    // 从队尾入队
    public function pushBack($item) {
        $this->list->push($item);
    }

    // 从队尾出队
    public function popBack() {
        return $this->list->pop();
    }

    // 从队首入队
    public function pushFront($item) {
        $this->list->unshift($item);
    }

    // 从队首出队
    public function popFront() {
        return $this->list->shift();
    }

    // 获取队列元素数量
    public function size() {
        return $this->list->count();
    }

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

使用示例

$deque = new Deque();

// 添加元素
$deque->pushBack(1);
$deque->pushFront(2);
$deque->pushBack(3);

// 移除元素
echo $deque->popFront(); // 输出2
echo $deque->popBack();  // 输出3

性能考虑

对于频繁的双端操作,SplDoublyLinkedList比数组实现更高效,因为数组的头部操作(array_shift/unshift)需要重新索引所有元素。在大型数据集上,SplDoublyLinkedList表现更优。

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

相关文章

vue实现双向数据绑定的原理

vue实现双向数据绑定的原理

Vue 双向数据绑定的原理 Vue 实现双向数据绑定的核心是通过 数据劫持 和 发布-订阅模式 结合实现的。主要依赖 Object.defineProperty(Vue 2.x)或 Proxy(Vue…

vue双向绑定实现简单

vue双向绑定实现简单

Vue 双向绑定的简单实现 双向绑定的核心是通过数据劫持结合发布-订阅模式实现。以下是简化版的实现步骤: 数据劫持(Object.defineProperty) 通过 Object.definePr…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

vue双向实现原理

vue双向实现原理

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过数据劫持结合发布-订阅模式实现,核心是 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)。…

vue怎么实现双向

vue怎么实现双向

Vue 双向绑定的实现方式 Vue 中实现双向绑定的核心机制是 v-model 指令,它结合了属性绑定和事件监听,适用于表单元素或自定义组件。 表单元素的双向绑定 在原生表单元素(如 input、s…

vue双向绑定如何实现

vue双向绑定如何实现

Vue 双向绑定的实现原理 Vue 的双向绑定是通过数据劫持结合发布者-订阅者模式实现的,核心是 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)。 Vu…