SPL提供了雙向鏈表、堆棧、隊列、堆、降序堆、升序堆、優先級隊列、定長數組、對象容器
SplQueue 隊列類
進出異端,先進先出
<?php $obj = new SplQueue();//插入一個節點到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();//從隊列中返回并刪除bottom位置的元素$obj->dequeue();/**
'C'
SplQueue Object
(
[flags:SplDoublyLinkedList:private] => 4
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => 2
[1] => 3
)
)
*/復制代碼
SplStack 堆棧類
單端進出時,后進先出,先進后出
$obj = new SplStack();/**
SplStack Object
(
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
)
)
*///向堆棧放入一個節點到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節點靠近bottom位置的相鄰節點$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節點,而雙向鏈表的rewind指向bottom節點$obj->rewind();//堆棧的next是使指針向bottom方向相鄰的節點移動一位,而鏈表是向top方向移動$obj->next();//遍歷堆棧$obj->rewind();while($obj->valid()){ echo $obj->key().'=>'.$obj->current();
$obj->next();
}/**
2=>'C'
1=>'B'
0=>1
*///從堆棧中取出top位置的節點并刪除$obj->pop();復制代碼
SplDoublyLinkedList 雙向鏈表類
$obj = new SplDoublyLinkedList();//SplDoublyLinkedList Object ( [flags:SplDoublyLinkedList:private] => 0 [dllist:SplDoublyLinkedList:private] => Array ( ) )//把新的節點數據添加到鏈表的頂部Top$obj->push(1);
$obj->push(2);
$obj->push(3);//把新的節點數據添加到鏈表底部bottom$obj->unshift(4);/**
SplDoublyLinkedList Object
(
[flags:SplDoublyLinkedList:private] => 0
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => 4
[1] => 1
[2] => 2
[3] => 3
)
)
*///在沒有調用rewind()方法之前輸出為nullecho 'current'.$obj->current();//輸出: null//把指針指向bottom節點$obj->rewind();//獲取當前指針指向的節點$obj->current();//輸出: 4//將執行挪到下一個$obj->next();
$obj->current();//輸出: 1$obj->prev();
$obj->current();//輸出: 4//越界了$obj->next();
$obj->next();
$obj->next();
$obj->next();
$obj->current();//輸出: null//判斷當前節點是否有效$obj->valid()//輸出: false$obj->prev();
$obj->valid()//輸出: true$obj->shift();//把top節點從鏈表中刪除并返回$obj->pop();//輸出 3//把bottom節點從鏈表中刪除并返回$obj->shift();//輸出 4//返回top節點$obj->top();//返回bottom節點$obj->bottom();復制代碼
感謝您的閱讀,如果對您有幫助,歡迎關注”CRMEB”。碼云上有我們開源的商城項目,知識付費項目,均是基于PHP+vue開發,學習研究歡迎使用,關注我們保持聯系!
想了解更多編程學習,敬請關注php培訓欄目!