php实现双向队列
PHP 实现双向队列
在 PHP 中,双向队列(Deque)可以通过数组或 SplDoublyLinkedList 类实现。以下是两种常见方法:
使用数组实现
数组可以通过 array_push、array_pop、array_shift 和 array_unshift 函数模拟双向队列的操作:
$deque = [];
// 从队尾插入元素
array_push($deque, 'A');
array_push($deque, 'B');
// 从队头插入元素
array_unshift($deque, 'C');
// 从队尾弹出元素
$last = array_pop($deque);
// 从队头弹出元素
$first = array_shift($deque);
使用 SplDoublyLinkedList 类
PHP 的 SPL(标准 PHP 库)提供了 SplDoublyLinkedList 类,原生支持双向队列操作:
$deque = new SplDoublyLinkedList();
// 从队尾插入元素
$deque->push('A');
$deque->push('B');
// 从队头插入元素
$deque->unshift('C');
// 从队尾弹出元素
$last = $deque->pop();
// 从队头弹出元素
$first = $deque->shift();
性能比较
- 数组实现简单,但在头部操作(
array_shift/array_unshift)时性能较差,因为需要重新索引。 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() {
return $this->list->shift();
}
public function removeRear() {
return $this->list->pop();
}
public function isEmpty() {
return $this->list->isEmpty();
}
public function size() {
return $this->list->count();
}
}
使用示例
$deque = new Deque();
$deque->addFront('A');
$deque->addRear('B');
echo $deque->removeFront(); // 输出 'A'
echo $deque->removeRear(); // 输出 'B'






