用PHP实现队列
队列的基本概念
队列是一种先进先出(FIFO)的数据结构,支持从队尾插入元素(入队)和从队头移除元素(出队)。PHP中可通过数组或链表实现队列。
使用数组实现队列
PHP数组原生支持队列操作,但需注意数组的 array_shift 和 array_push 函数效率较低(时间复杂度为 O(n))。
$queue = [];
// 入队
array_push($queue, 'item1');
$queue[] = 'item2'; // 等效写法
// 出队
$item = array_shift($queue);
echo $item; // 输出 'item1'
缺点:频繁出队时性能较差,因 array_shift 需重新索引数组。
使用 SplQueue 标准库
PHP的 SplQueue 类专门为队列设计,性能优于数组操作。
$queue = new SplQueue();
// 入队
$queue->enqueue('item1');
$queue->enqueue('item2');
// 出队
$item = $queue->dequeue();
echo $item; // 输出 'item1'
// 检查队列是否为空
if (!$queue->isEmpty()) {
echo "队列非空";
}
优点:
- 提供
enqueue和dequeue方法,语义清晰。 - 性能高效,底层基于链表实现。
自定义链表实现队列
如需完全控制底层逻辑,可手动实现链表队列:
class Node {
public $data;
public $next;
public function __construct($data) {
$this->data = $data;
$this->next = null;
}
}
class Queue {
private $front;
private $rear;
public function enqueue($data) {
$newNode = new Node($data);
if ($this->rear === null) {
$this->front = $this->rear = $newNode;
} else {
$this->rear->next = $newNode;
$this->rear = $newNode;
}
}
public function dequeue() {
if ($this->front === null) {
return null;
}
$item = $this->front->data;
$this->front = $this->front->next;
if ($this->front === null) {
$this->rear = null;
}
return $item;
}
public function isEmpty() {
return $this->front === null;
}
}
// 使用示例
$queue = new Queue();
$queue->enqueue('item1');
$queue->enqueue('item2');
echo $queue->dequeue(); // 输出 'item1'
适用场景:需要完全自定义队列逻辑或学习数据结构实现时。
性能对比
- 数组队列:简单但出队性能低,适合少量数据。
- SplQueue:推荐方案,兼顾性能和易用性。
- 自定义链表:灵活但需额外维护代码。
根据实际需求选择合适实现方式。







