PHP SplQueue 队列用法
2021-12-01 本文已影响0人
江月照我眠
在PHP中,我们可以用array来简单模拟队列的功能,array_push出列,array_pop入列,但是更高效的用法还是要使用SplQueue这个官方提供的队列类来做,记录一下简单的用法。
$queue = new SplQueue;
// 注意队列的特点是先进先出(FIFO)
// 入队
$queue->enqueue(1); // 此时队列中的节点为 1
$queue->enqueue(2); // 此时队列中的节点为 2 - 1
$queue->enqueue(3); // 此时队列中的节点为 3 - 2 - 1
// 队列节点的个数
$size = $queue->count();
// 得到最后入列元素的值
$top = $queue->top(); // 此时结果为3,队列节点不变
// 得到先入列元素的值
$bottom = $queue->bottom(); // 此时结果为1,队列节点不变
// 出队
$queue->dequeue(); // 此时队列中的节点为 3 - 2
$queue->dequeue(); // 此时队列中的节点为 3
$queue->dequeue(); // 此时队列中的节点为 空
// 判断队列是否为空
$result = $queue->isEmpty(); // 结果为true
我们注意到,SplQueue中还有push和pop方法,它们与enqueue和dequeue有什么区别呢?
push和enqueue没有区别,但是pop等同于栈的pop(FILO),每次弹出最后压入队列的元素。
而队列是先进先出(FIFO)的,所以每次弹出的都是剩下的节点中先入列节点
$queue = new SplQueue;
// 入队
$queue->push(1); // 此时队列中的节点为 1
$queue->push(2); // 此时队列中的节点为 2 - 1
$queue->push(3); // 此时队列中的节点为 3 - 2 - 1
// 出列
$queue->pop(); // 次数队列中的节点为 2 - 1
$queue->pop(); // 次数队列中的节点为 1
$queue->pop(); // 次数队列中的节点为 空
// 入列
$queue->enqueue(1); // 此时队列中的节点为 1
$queue->enqueue(2); // 此时队列中的节点为 2 - 1
$queue->enqueue(3); // 此时队列中的节点为 3 - 2 - 1
// 出列
$queue->dequeue(); // 此时队列中的节点为 3 - 2
$queue->dequeue(); // 此时队列中的节点为 3
$queue->dequeue(); // 此时队列中的节点为 空
以上是PHP队列的简单用法,下面是一些迭代器指针相关的操作
$queue = new SplQueue;
// 将元素压入队列
$queue->enqueue(1); // 此时队列中的节点为 1
$queue->enqueue(2); // 此时队列中的节点为 2 - 1
$queue->enqueue(3); // 此时队列中的节点为 3 - 2 - 1
// 将迭代器指针退回到第一个节点(按入列顺序)
$queue->rewind();
// 得到当前节点的值,如果直接使用,得到的结果是NULL,必须在rewind之后使用
$current = $queue->current();
// 当前节点的序号(按入列顺序,从0开始)
$queue->key();
// 当前迭代器指向的节点是否为空
$valid = $queue->valid();
// 迭代器指向下一个节点(按入列顺序)
$queue->next();