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