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

使用数组实现双向队列
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 是更专业和高效的选择。






