了解队列
队列是另一种特殊的线性数据结构,遵循先进先出(FIFO)原则。操作有两端:一端用于向队列追加,一端用于从队列移除。这与堆栈不同,在堆栈中,我们使用一端进行添加和删除操作。插入操作总是在后部进行。元素的移除则在前端进行。向队列中添加新元素的过程称为 enqueue
,移除元素的过程称为 dequeue
。在不移除元素的情况下查看队列前端元素的过程称为 "偷看",类似于堆栈的顶层操作。下图描述了队列的表示方法:

现在,如果我们为队列定义一个接口,它将看起来像这样:
Unresolved include directive in modules/ROOT/pages/ch04/ch4-07.adoc - include::example$Chapter04/5.php[]
现在,我们可以使用不同的方法来实现队列,就像使用堆栈一样。首先,我们将使用 PHP 数组来实现队列,然后是 LinkedList
,最后是 SplQueue
。
使用 PHP 数组实现队列
现在我们将使用 PHP 数组来实现队列数据结构。我们已经看到可以使用 array_push()
函数在数组末尾添加一个元素。为了移除数组的第一个元素,我们可以使用 PHP 的 array_shift()
函数,而对于 peek
函数,我们可以使用 PHP 的 current()
函数。下面是根据我们的讨论编写的代码:
Unresolved include directive in modules/ROOT/pages/ch04/ch4-07.adoc - include::example$Chapter04/5.php[]
在这里,我们保持了与堆栈相同的原则。我们要定义一个固定大小的队列,并对溢出和下溢进行检查。为了运行队列实现,我们可以考虑将其用作呼叫中心应用程序的代理队列。下面是使用队列操作的代码:
Unresolved include directive in modules/ROOT/pages/ch04/ch4-07.adoc - include::example$Chapter04/5.php[]
输出结果如下:
Fred
John
Keith