SPL提供了雙向鏈表、堆棧、隊(duì)列、堆、降序堆、升序堆、優(yōu)先級(jí)隊(duì)列、定長(zhǎng)數(shù)組、對(duì)象容器

SplQueue 隊(duì)列類
進(jìn)出異端,先進(jìn)先出

<?php$obj = new SplQueue();//插入一個(gè)節(jié)點(diǎn)到top位置$obj->enqueue(1); $obj->enqueue(2); $obj->enqueue(3);/** SplQueue Object ( [flags:SplDoublyLinkedList:private] => 4 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) */$obj->offsetSet(0,'C');/** SplQueue Object ( [flags:SplDoublyLinkedList:private] => 4 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 'C' [1] => 2 [2] => 3 ) ) */$obj->rewind();//從隊(duì)列中返回并刪除bottom位置的元素$obj->dequeue();/** 'C' SplQueue Object ( [flags:SplDoublyLinkedList:private] => 4 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 2 [1] => 3 ) ) */復(fù)制代碼
SplStack 堆棧類
單端進(jìn)出時(shí),后進(jìn)先出,先進(jìn)后出

$obj = new SplStack();/** SplStack Object ( [flags:SplDoublyLinkedList:private] => 6 [dllist:SplDoublyLinkedList:private] => Array ( ) ) *///向堆棧放入一個(gè)節(jié)點(diǎn)到top位置$obj->push(1); $obj->push(2); $obj->push(3);/** SplStack Object ( [flags:SplDoublyLinkedList:private] => 6 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) *///堆棧的offset = 0 是Top所在的位置,offset = 1 是top節(jié)點(diǎn)靠近bottom位置的相鄰節(jié)點(diǎn)$obj->offsetSet(0,'C');/** SplStack Object ( [flags:SplDoublyLinkedList:private] => 6 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 1 [1] => 2 [2] => 'C' ) ) */$obj->offsetSet(1,'B');/** SplStack Object ( [flags:SplDoublyLinkedList:private] => 6 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 1 [1] => 'B' [2] => 'C' ) ) *///堆棧的rewind使指針指向top節(jié)點(diǎn),而雙向鏈表的rewind指向bottom節(jié)點(diǎn)$obj->rewind();//堆棧的next是使指針向bottom方向相鄰的節(jié)點(diǎn)移動(dòng)一位,而鏈表是向top方向移動(dòng)$obj->next();//遍歷堆棧$obj->rewind();while($obj->valid()){ echo $obj->key().'=>'.$obj->current(); $obj->next(); }/** 2=>'C' 1=>'B' 0=>1 *///從堆棧中取出top位置的節(jié)點(diǎn)并刪除$obj->pop();復(fù)制代碼
SplDoublyLinkedList 雙向鏈表類

$obj = new SplDoublyLinkedList();//SplDoublyLinkedList Object ( [flags:SplDoublyLinkedList:private] => 0 [dllist:SplDoublyLinkedList:private] => Array ( ) )//把新的節(jié)點(diǎn)數(shù)據(jù)添加到鏈表的頂部Top$obj->push(1); $obj->push(2); $obj->push(3);//把新的節(jié)點(diǎn)數(shù)據(jù)添加到鏈表底部bottom$obj->unshift(4);/** SplDoublyLinkedList Object ( [flags:SplDoublyLinkedList:private] => 0 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 4 [1] => 1 [2] => 2 [3] => 3 ) ) *///在沒(méi)有調(diào)用rewind()方法之前輸出為nullecho 'current'.$obj->current();//輸出: null//把指針指向bottom節(jié)點(diǎn)$obj->rewind();//獲取當(dāng)前指針指向的節(jié)點(diǎn)$obj->current();//輸出: 4//將執(zhí)行挪到下一個(gè)$obj->next(); $obj->current();//輸出: 1$obj->prev(); $obj->current();//輸出: 4//越界了$obj->next(); $obj->next(); $obj->next(); $obj->next(); $obj->current();//輸出: null//判斷當(dāng)前節(jié)點(diǎn)是否有效$obj->valid()//輸出: false$obj->prev(); $obj->valid()//輸出: true$obj->shift();//把top節(jié)點(diǎn)從鏈表中刪除并返回$obj->pop();//輸出 3//把bottom節(jié)點(diǎn)從鏈表中刪除并返回$obj->shift();//輸出 4//返回top節(jié)點(diǎn)$obj->top();//返回bottom節(jié)點(diǎn)$obj->bottom();復(fù)制代碼
感謝您的閱讀,如果對(duì)您有幫助,歡迎關(guān)注"CRMEB"。碼云上有我們開(kāi)源的商城項(xiàng)目,知識(shí)付費(fèi)項(xiàng)目,均是基于PHP+vue開(kāi)發(fā),學(xué)習(xí)研究歡迎使用,關(guān)注我們保持聯(lián)系!
想了解