真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

什么是PHP優(yōu)先級(jí)隊(duì)列-創(chuàng)新互聯(lián)

這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹什么是PHP優(yōu)先級(jí)隊(duì)列,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

目前創(chuàng)新互聯(lián)公司已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、東營網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

PHP 的 SPL 庫內(nèi)置了 SplPriorityQueue優(yōu)先級(jí)隊(duì)列,并且是以Heap數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的,默認(rèn)為MaxHeap模式,即priority越大越優(yōu)先出隊(duì),同時(shí)可以通過重寫compare方法來使用MinHeap(優(yōu)先級(jí)越低越優(yōu)先出隊(duì),場(chǎng)景貌似很少吧)。

SplPriorityQueue

堆特性

這里需要注意并理解:SplPriorityQueue是以堆數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的,當(dāng)我們出隊(duì)時(shí)會(huì)拿出堆頂?shù)脑兀藭r(shí)堆的特性被破壞,堆會(huì)進(jìn)行相應(yīng)的調(diào)整至穩(wěn)定態(tài)(MaxHeap or MinHeap),即會(huì)將最后一個(gè)元素替換到堆頂,然后進(jìn)行穩(wěn)定態(tài)驗(yàn)證,不符合堆特性則繼續(xù)調(diào)整,或者我們就得到了一個(gè)穩(wěn)定態(tài)的堆,所以當(dāng)優(yōu)先級(jí)相同,出隊(duì)順序并不會(huì)按照入隊(duì)順序。

源碼示例:

setExtractFlags(\SplPriorityQueue::EXTR_DATA);
$splPriorityQueue->insert("task1", 1);
$splPriorityQueue->insert("task2", 1);
$splPriorityQueue->insert("task3", 1);
$splPriorityQueue->insert("task4", 1);
$splPriorityQueue->insert("task5", 1);

echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;
echo $splPriorityQueue->extract() . PHP_EOL;

//執(zhí)行結(jié)果
task1
task5
task4
task3
task2

可以看到,雖然 5 個(gè)任務(wù)的優(yōu)先級(jí)相同,但隊(duì)列并沒有按照入隊(duì)順序返回?cái)?shù)據(jù),因?yàn)槎训奶匦允谷唬?br/>1、入隊(duì) task1, task2, task3, task4, task5,因?yàn)閮?yōu)先級(jí)相同,所以堆一直處于穩(wěn)定態(tài)。
2、出隊(duì),得 task1,堆先將結(jié)構(gòu)調(diào)整為 task5, task2, task3, task4,已然達(dá)到了穩(wěn)定態(tài)。
3、出隊(duì),得 task5,堆先將結(jié)構(gòu)調(diào)整為 task4, task2, task3,已然達(dá)到了穩(wěn)定態(tài)。
4、出隊(duì),得 task4,堆先將結(jié)構(gòu)調(diào)整為 task3, task2,已然達(dá)到了穩(wěn)定態(tài)。
5、出隊(duì),得 task3,堆先將結(jié)構(gòu)調(diào)整為 task2,已然達(dá)到了穩(wěn)定態(tài)。
4、出隊(duì),得 task2。

Iterator, Countable

SplPriorityQueue實(shí)現(xiàn)了 Iterator, Countable接口,所以我們可以foreach/count函數(shù)操作它,或者使用rewind,valid,current,next/count方法。

注意,因?yàn)槭嵌褜?shí)現(xiàn),所以rewind方法是一個(gè)no-op沒有什作用的操作,因?yàn)轭^指針始終指向堆頂,即current始終等于top,不像List只是游走指針,出隊(duì)是會(huì)刪除堆元素的,extract = current + next(current出隊(duì),從堆中刪除)。

insert("task1", 1);
$splPriorityQueue->insert("task2", 2);
$splPriorityQueue->insert("task3", 1);
$splPriorityQueue->insert("task4", 4);
$splPriorityQueue->insert("task5", 5);

echo "Countable: " . count($splPriorityQueue) . PHP_EOL;

// 迭代的話會(huì)刪除隊(duì)列元素 current 指針始終指向 top 所以 rewind 沒什么意義
for ($splPriorityQueue->rewind(); $splPriorityQueue->valid();$splPriorityQueue->next()) { 
    var_dump($splPriorityQueue->current());
    var_dump($splPriorityQueue->count());
    $splPriorityQueue->rewind();
}

var_dump("is empty:" . $splPriorityQueue->isEmpty());

Extract出隊(duì)

extract 出隊(duì)更為友好,即始終返回優(yōu)先級(jí)最高的元素,優(yōu)先級(jí)相投時(shí)會(huì)以堆調(diào)整的特性返回?cái)?shù)據(jù)。

insert("task1", 1);
$splPriorityQueue->insert("task2", 2);
$splPriorityQueue->insert("task3", 1);
$splPriorityQueue->insert("task4", 4);
$splPriorityQueue->insert("task5", 5);

echo "Countable: " . count($splPriorityQueue) . PHP_EOL;

while (! $splPriorityQueue->isEmpty()) {
    var_dump($splPriorityQueue->extract());
    echo $splPriorityQueue->count() . PHP_EOL;
}

自定義優(yōu)先級(jí)處理方式

重寫compare方法定義自己的優(yōu)先級(jí)處理機(jī)制。

setExtractFlags(SplPriorityQueue::EXTR_BOTH);
$splPriorityQueue->insert("task1", 1);
$splPriorityQueue->insert("task2", 2);
$splPriorityQueue->insert("task3", 1);
$splPriorityQueue->insert("task4", 4);
$splPriorityQueue->insert("task5", 5);
 
echo "Countable: " . count($splPriorityQueue) . PHP_EOL;

while (!$splPriorityQueue->isEmpty()) {
    var_dump($splPriorityQueue->extract());
}

關(guān)于什么是PHP優(yōu)先級(jí)隊(duì)列就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


文章標(biāo)題:什么是PHP優(yōu)先級(jí)隊(duì)列-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://weahome.cn/article/cssehc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部