摘要:普通的隊列是一種先進先出的數(shù)據(jù)結(jié)構(gòu),元素在隊列尾追加,而從隊列頭取出。在優(yōu)先隊列中,元素被賦予優(yōu)先級。當訪問元素時,具有最高優(yōu)先級的元素最先取出。優(yōu)先隊列具有最高級先出,的行為特征。
普通的隊列是一種先進先出的數(shù)據(jù)結(jié)構(gòu),元素在隊列尾追加,而從隊列頭取出。在優(yōu)先隊列中,元素被賦予優(yōu)先級。當訪問元素時,具有最高優(yōu)先級的元素最先取出。優(yōu)先隊列具有最高級先出 (largest-in,first-out)的行為特征。
總結(jié)下來就是普通隊列有先進先出原則,優(yōu)先級隊列有優(yōu)先級高先出原則,這個優(yōu)先級可以設(shè)置;
// 1. 沒有實現(xiàn)ArrayAccess接口,所以不能像數(shù)組那樣操作; SplPriorityQueue implements Iterator , Countable { /* 方法 */ public __construct ( void ) // 比較方法,內(nèi)部應該用到了冒泡排序,對于權(quán)重值來說,返回0代表相等,返回正整數(shù)就代表大于,返回負整數(shù)就代表小于; // 默認是權(quán)重值越優(yōu)先,也可以讓其被子類覆蓋改為權(quán)重值越小越優(yōu)先 public int compare ( mixed $priority1 , mixed $priority2 ) public mixed extract ( void ) //恢復到上一個被破壞的節(jié)點? 測試無用; public void recoverFromCorruption ( void ) public void setExtractFlags ( int $flags ) public void insert ( mixed $value , mixed $priority ) public int count ( void ) public mixed current ( void ) public bool isEmpty ( void ) public mixed key ( void ) public void next ( void ) public void rewind ( void ) public mixed top ( void ) public bool valid ( void ) }Example
class PQtest extends SplPriorityQueue { //覆蓋父類,更改其優(yōu)先規(guī)則為權(quán)重值越小越優(yōu)先; public function compare($priority1, $priority2) { if ($priority1 === $priority2) return 0; return $priority1 > $priority2 ? -1 : 1; } } $pq = new PQtest(); // 設(shè)置值與優(yōu)先值 $pq->insert("a", 10); $pq->insert("b", 1); $pq->insert("c", 8); /** * 設(shè)置元素出隊模式 * SplPriorityQueue::EXTR_DATA 僅提取值 * SplPriorityQueue::EXTR_PRIORITY 僅提取優(yōu)先級 * SplPriorityQueue::EXTR_BOTH 提取數(shù)組包含值和優(yōu)先級 */ $pq->setExtractFlags(PQtest::EXTR_BOTH); //從頂部取出一個節(jié)點,該節(jié)點下面的節(jié)點移上為頂部節(jié)點; print_r( $pq->extract() ); /* [data] => b [priority] => 1 */ $pq->recoverFromCorruption(); //拿出頂部節(jié)點 print_r( $pq->extract() ); /* [data] => c [priority] => 8 */ // 還原自上一個節(jié)點? 沒什么效果? $pq->recoverFromCorruption(); print_r( $pq->current() ); $pq->rewind(); while($pq->valid()){ print_r($pq->current()); echo PHP_EOL; $pq -> next(); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31559.html
摘要:是用來存儲一組對象的,特別是當你需要唯一標識對象的時候。類實現(xiàn)了四個接口。可實現(xiàn)統(tǒng)計迭代序列化數(shù)組式訪問等功能。 PHP SPL SplObjectStorage是用來存儲一組對象的,特別是當你需要唯一標識對象的時候。PHP SPL SplObjectStorage類實現(xiàn)了Countable,Iterator,Serializable,ArrayAccess四個接口??蓪崿F(xiàn)統(tǒng)計、迭代、...
摘要:主要是處理數(shù)組相關(guān)的主要功能,與普通不同的是,它是固定長度的,且以數(shù)字為鍵名的數(shù)組,優(yōu)勢就是比普通的數(shù)組處理更快。類摘要方法導入數(shù)組,返回對象把對象數(shù)組導出為真正的數(shù)組由于是定長數(shù)組,所以超過定長就會拋出異常。 SplFixedArray主要是處理數(shù)組相關(guān)的主要功能,與普通php array不同的是,它是固定長度的,且以數(shù)字為鍵名的數(shù)組,優(yōu)勢就是比普通的數(shù)組處理更快。 類摘要 SplF...
摘要:堆就是為了實現(xiàn)優(yōu)先隊列而設(shè)計的一種數(shù)據(jù)結(jié)構(gòu),它是通過構(gòu)造二叉堆二叉樹的一種實現(xiàn)。根節(jié)點最大的堆叫做最大堆或大根堆,根節(jié)點最小的堆叫做最小堆或小根堆。二叉堆還常用于排序堆排序。 堆(Heap)就是為了實現(xiàn)優(yōu)先隊列而設(shè)計的一種數(shù)據(jù)結(jié)構(gòu),它是通過構(gòu)造二叉堆(二叉樹的一種)實現(xiàn)。根節(jié)點最大的堆叫做最大堆或大根堆,根節(jié)點最小的堆叫做最小堆或小根堆。二叉堆還常用于排序(堆排序)。 showImg(...
摘要:這兩個類都是繼承自,分別派生自的堆棧模式和隊列模式所以放在一起來介紹堆棧類摘要方法重寫了父類,固定為堆棧模式,然后此處只需要傳或者。 這兩個類都是繼承自SplDoublyLinkedList,分別派生自SplDoublyLinkedList的堆棧模式和隊列模式;所以放在一起來介紹; 堆棧SplStack showImg(https://segmentfault.com/img/remo...
摘要:簡述雙鏈表是一種重要的線性存儲結(jié)構(gòu),對于雙鏈表中的每個節(jié)點,不僅僅存儲自己的信息,還要保存前驅(qū)和后繼節(jié)點的地址。 簡述 雙鏈表是一種重要的線性存儲結(jié)構(gòu),對于雙鏈表中的每個節(jié)點,不僅僅存儲自己的信息,還要保存前驅(qū)和后繼節(jié)點的地址。 showImg(https://segmentfault.com/img/remote/1460000019231932?w=813&h=236); 類摘要 ...
閱讀 3053·2021-09-03 10:33
閱讀 1278·2019-08-30 15:53
閱讀 2627·2019-08-30 15:45
閱讀 3389·2019-08-30 14:11
閱讀 541·2019-08-30 13:55
閱讀 2590·2019-08-29 15:24
閱讀 1921·2019-08-26 18:26
閱讀 3573·2019-08-26 13:41