PHP实战PHP经验分享PHP数据结构

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();

上一篇下一篇

猜你喜欢

热点阅读