当前位置:首页 > PHP

php实现双向队列

2026-04-03 00:15:51PHP

PHP 实现双向队列

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

php实现双向队列

使用数组实现双向队列

PHP 数组本身支持灵活的操作,可以模拟双向队列的行为:

php实现双向队列

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() {
        return array_shift($this->queue);
    }

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

    // 获取队头元素
    public function peekFront() {
        return $this->queue[0] ?? null;
    }

    // 获取队尾元素
    public function peekRear() {
        return $this->queue[count($this->queue) - 1] ?? null;
    }

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

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

使用 SplDoublyLinkedList 实现双向队列

PHP 标准库中的 SplDoublyLinkedList 类原生支持双向队列操作,效率更高:

$deque = new SplDoublyLinkedList();

// 从队头插入元素
$deque->unshift('Front Item');

// 从队尾插入元素
$deque->push('Rear Item');

// 从队头移除元素
$frontItem = $deque->shift();

// 从队尾移除元素
$rearItem = $deque->pop();

// 获取队头元素(不移除)
$peekFront = $deque->bottom();

// 获取队尾元素(不移除)
$peekRear = $deque->top();

// 检查队列是否为空
$isEmpty = $deque->isEmpty();

// 获取队列大小
$size = $deque->count();

性能比较

  • 数组实现:适合简单场景,但频繁的 array_shift 操作会导致重新索引,影响性能。
  • SplDoublyLinkedList:专门为双向操作优化,性能更高,推荐生产环境使用。

使用示例

// 使用 SplDoublyLinkedList 示例
$deque = new SplDoublyLinkedList();
$deque->push(1);       // 队尾插入
$deque->unshift(2);    // 队头插入
echo $deque->pop();    // 输出 1
echo $deque->shift();  // 输出 2

两种方式均可实现双向队列,根据实际需求选择合适的方法。SplDoublyLinkedList 是更专业和高效的选择。

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

相关文章

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

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

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

php队列的实现

php队列的实现

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

vue实现双向滚动

vue实现双向滚动

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

vue双向绑定实现

vue双向绑定实现

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

vue双向绑定如何实现

vue双向绑定如何实现

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

vue如何实现双向变电

vue如何实现双向变电

Vue 双向绑定实现方法 Vue 中实现双向绑定的核心是通过 v-model 指令,它结合了 v-bind 和 v-on 的功能,简化了表单元素与数据的同步操作。 基础用法 在表单元素上直接使用 v…