当前位置:首页 > 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 中实现双向绑定的核心机制是 v-model 指令,它结合了属性绑定和事件监听,适用于表单元素或自定义组件。 表单元素的双向绑定 在原生表单元素(如 input、s…

vue中实现双向绑定

vue中实现双向绑定

Vue 双向绑定的实现方式 Vue 中实现双向绑定主要通过 v-model 指令,它结合了属性绑定和事件监听,适用于表单元素和自定义组件。 表单元素的双向绑定 在表单元素(如 input、texta…

vue双向绑定的实现

vue双向绑定的实现

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

react如何双向数据绑定

react如何双向数据绑定

双向数据绑定的实现方法 React 本身是单向数据流的设计理念,但可以通过以下方式实现类似双向数据绑定的效果: 受控组件方式 通过 value 和 onChange 事件实现双向绑定: f…

react如何实现双向数据绑定

react如何实现双向数据绑定

实现双向数据绑定的方法 React 本身没有内置双向数据绑定的机制,但可以通过以下几种方式实现类似的功能。 使用受控组件 通过 value 和 onChange 属性将表单元素的状态与 React…

react实现数据双向绑定

react实现数据双向绑定

实现双向绑定的方法 在React中实现双向绑定可以通过受控组件(Controlled Components)或状态管理库(如MobX)来完成。以下是几种常见的方法: 使用受控组件 受控组件通过将表单…