摘要:堆就是為了實(shí)現(xiàn)優(yōu)先隊(duì)列而設(shè)計(jì)的一種數(shù)據(jù)結(jié)構(gòu),它是通過構(gòu)造二叉堆二叉樹的一種實(shí)現(xiàn)。根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。二叉堆還常用于排序堆排序。
堆(Heap)就是為了實(shí)現(xiàn)優(yōu)先隊(duì)列而設(shè)計(jì)的一種數(shù)據(jù)結(jié)構(gòu),它是通過構(gòu)造二叉堆(二叉樹的一種)實(shí)現(xiàn)。根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。二叉堆還常用于排序(堆排序)。
類摘要abstract SplHeap implements Iterator , Countable { /* 方法 */ public __construct ( void ) abstract protected int compare ( mixed $value1 , mixed $value2 ) public int count ( void ) public mixed current ( void ) public mixed extract ( void ) public void insert ( mixed $value ) public bool isEmpty ( void ) public mixed key ( void ) public void next ( void ) public void recoverFromCorruption ( void ) public void rewind ( void ) public mixed top ( void ) public bool valid ( void ) }
從上面可以看到由于類中包含一個(gè)compare的抽象方法,所以該類必須為抽象類(不可實(shí)例化,只能被繼承使用);
最小堆和最大堆其實(shí)就是對compare該抽象方法的一個(gè)算法的兩種呈現(xiàn); 也可以自己寫一個(gè)類繼承SplHeap按自己的方式來做排序;
Example 自定義排序堆class MySimpleHeap extends SplHeap { //compare()方法用來比較兩個(gè)元素的大小,決定他們在堆中的位置 public function compare( $value1, $value2 ) { return ($value2 - $value1); } } $obj = new MySimpleHeap(); $obj->insert( 4 ); $obj->insert( 8 ); $obj->insert( 1 ); $obj->insert( 0 ); echo $obj->top(); //8 foreach( $obj as $number ) { echo $number; echo PHP_EOL; }最大堆與最小堆
$heap = new SplMaxHeap(); $heap->insert(100); $heap->insert(80); $heap->insert(88); $heap->insert(70); $heap->insert(810); $heap->insert(800); //最大堆,從大到小排序 $heap->rewind(); while($heap->valid()){ echo $heap->key(),"=>",$heap->current(),PHP_EOL; $heap->next(); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/31552.html
摘要:這兩個(gè)類都是繼承自,分別派生自的堆棧模式和隊(duì)列模式所以放在一起來介紹堆棧類摘要方法重寫了父類,固定為堆棧模式,然后此處只需要傳或者。 這兩個(gè)類都是繼承自SplDoublyLinkedList,分別派生自SplDoublyLinkedList的堆棧模式和隊(duì)列模式;所以放在一起來介紹; 堆棧SplStack showImg(https://segmentfault.com/img/remo...
摘要:普通的隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),元素在隊(duì)列尾追加,而從隊(duì)列頭取出。在優(yōu)先隊(duì)列中,元素被賦予優(yōu)先級。當(dāng)訪問元素時(shí),具有最高優(yōu)先級的元素最先取出。優(yōu)先隊(duì)列具有最高級先出,的行為特征。 普通的隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),元素在隊(duì)列尾追加,而從隊(duì)列頭取出。在優(yōu)先隊(duì)列中,元素被賦予優(yōu)先級。當(dāng)訪問元素時(shí),具有最高優(yōu)先級的元素最先取出。優(yōu)先隊(duì)列具有最高級先出 (largest-in,first...
摘要:是用來存儲一組對象的,特別是當(dāng)你需要唯一標(biāo)識對象的時(shí)候。類實(shí)現(xiàn)了四個(gè)接口。可實(shí)現(xiàn)統(tǒng)計(jì)迭代序列化數(shù)組式訪問等功能。 PHP SPL SplObjectStorage是用來存儲一組對象的,特別是當(dāng)你需要唯一標(biāo)識對象的時(shí)候。PHP SPL SplObjectStorage類實(shí)現(xiàn)了Countable,Iterator,Serializable,ArrayAccess四個(gè)接口。可實(shí)現(xiàn)統(tǒng)計(jì)、迭代、...
摘要:主要是處理數(shù)組相關(guān)的主要功能,與普通不同的是,它是固定長度的,且以數(shù)字為鍵名的數(shù)組,優(yōu)勢就是比普通的數(shù)組處理更快。類摘要方法導(dǎo)入數(shù)組,返回對象把對象數(shù)組導(dǎo)出為真正的數(shù)組由于是定長數(shù)組,所以超過定長就會拋出異常。 SplFixedArray主要是處理數(shù)組相關(guān)的主要功能,與普通php array不同的是,它是固定長度的,且以數(shù)字為鍵名的數(shù)組,優(yōu)勢就是比普通的數(shù)組處理更快。 類摘要 SplF...
摘要:簡述雙鏈表是一種重要的線性存儲結(jié)構(gòu),對于雙鏈表中的每個(gè)節(jié)點(diǎn),不僅僅存儲自己的信息,還要保存前驅(qū)和后繼節(jié)點(diǎn)的地址。 簡述 雙鏈表是一種重要的線性存儲結(jié)構(gòu),對于雙鏈表中的每個(gè)節(jié)點(diǎn),不僅僅存儲自己的信息,還要保存前驅(qū)和后繼節(jié)點(diǎn)的地址。 showImg(https://segmentfault.com/img/remote/1460000019231932?w=813&h=236); 類摘要 ...
閱讀 1769·2021-10-19 13:30
閱讀 1335·2021-10-14 09:48
閱讀 1531·2021-09-22 15:17
閱讀 2007·2019-08-30 15:52
閱讀 3273·2019-08-30 11:23
閱讀 1983·2019-08-29 15:27
閱讀 887·2019-08-29 13:55
閱讀 753·2019-08-26 14:05