PHP SplQueue 隊列用法

在PHP中,我們可以用array來簡單模擬隊列的功能,array_push出列,array_pop入列,但是更高效的用法還是要使用SplQueue這個官方提供的隊列類來做,記錄一下簡單的用法。

$queue = new SplQueue;

// 注意隊列的特點是先進先出(FIFO)

// 入隊
$queue->enqueue(1); // 此時隊列中的節(jié)點為 1
$queue->enqueue(2); // 此時隊列中的節(jié)點為 2 - 1
$queue->enqueue(3); // 此時隊列中的節(jié)點為 3 - 2 - 1

// 隊列節(jié)點的個數(shù)
$size = $queue->count();

// 得到最后入列元素的值
$top = $queue->top(); // 此時結(jié)果為3,隊列節(jié)點不變

// 得到先入列元素的值
$bottom = $queue->bottom(); // 此時結(jié)果為1,隊列節(jié)點不變

// 出隊
$queue->dequeue(); // 此時隊列中的節(jié)點為 3 - 2
$queue->dequeue(); // 此時隊列中的節(jié)點為 3
$queue->dequeue(); // 此時隊列中的節(jié)點為 空

// 判斷隊列是否為空
$result = $queue->isEmpty();  // 結(jié)果為true

我們注意到,SplQueue中還有push和pop方法,它們與enqueue和dequeue有什么區(qū)別呢?
push和enqueue沒有區(qū)別,但是pop等同于棧的pop(FILO),每次彈出最后壓入隊列的元素。
而隊列是先進先出(FIFO)的,所以每次彈出的都是剩下的節(jié)點中先入列節(jié)點

$queue = new SplQueue;

// 入隊
$queue->push(1); // 此時隊列中的節(jié)點為 1
$queue->push(2); // 此時隊列中的節(jié)點為 2 - 1
$queue->push(3); // 此時隊列中的節(jié)點為 3 - 2 - 1
// 出列
$queue->pop();      // 次數(shù)隊列中的節(jié)點為 2 - 1
$queue->pop();      // 次數(shù)隊列中的節(jié)點為 1
$queue->pop();      // 次數(shù)隊列中的節(jié)點為 空

// 入列
$queue->enqueue(1); // 此時隊列中的節(jié)點為 1
$queue->enqueue(2); // 此時隊列中的節(jié)點為 2 - 1
$queue->enqueue(3); // 此時隊列中的節(jié)點為 3 - 2 - 1
// 出列
$queue->dequeue();  // 此時隊列中的節(jié)點為 3 - 2
$queue->dequeue();  // 此時隊列中的節(jié)點為 3
$queue->dequeue();  // 此時隊列中的節(jié)點為 空

以上是PHP隊列的簡單用法,下面是一些迭代器指針相關(guān)的操作

$queue = new SplQueue;

// 將元素壓入隊列
$queue->enqueue(1); // 此時隊列中的節(jié)點為 1
$queue->enqueue(2); // 此時隊列中的節(jié)點為 2 - 1
$queue->enqueue(3); // 此時隊列中的節(jié)點為 3 - 2 - 1

// 將迭代器指針退回到第一個節(jié)點(按入列順序)
$queue->rewind();

// 得到當(dāng)前節(jié)點的值,如果直接使用,得到的結(jié)果是NULL,必須在rewind之后使用
$current = $queue->current();

// 當(dāng)前節(jié)點的序號(按入列順序,從0開始)
$queue->key();

// 當(dāng)前迭代器指向的節(jié)點是否為空
$valid = $queue->valid();

// 迭代器指向下一個節(jié)點(按入列順序)
$queue->next();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容