PHP SPL有哪些常用數(shù)據(jù)結(jié)構(gòu)
來(lái)源:荊州網(wǎng)站建設(shè)
時(shí)間:2017-10-13
堆(Heap)就是為了實(shí)現(xiàn)優(yōu)先隊(duì)列而設(shè)計(jì)的一種數(shù)據(jù)結(jié)構(gòu),它是通過(guò)構(gòu)造二叉堆(二叉樹的一種)實(shí)現(xiàn)。根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。二叉堆還常用于排序(堆排序)。
如下:最小堆(任意節(jié)點(diǎn)的優(yōu)先級(jí)不小于它的子節(jié)點(diǎn))
PHP的SPL提供了些數(shù)據(jù)結(jié)構(gòu)基本類型的實(shí)現(xiàn),雖然我們可以使用傳統(tǒng)的變量類型來(lái)描述數(shù)據(jù)結(jié)構(gòu),例如用數(shù)組來(lái)描述堆棧(Strack)然后使用對(duì)應(yīng)的方式 pop 和 push(array_pop()、array_push()),但你得時(shí)刻小心,因?yàn)楫吘顾鼈儾皇菍iT用于描述數(shù)據(jù)結(jié)構(gòu)的,一次誤操作就有可能破壞該堆棧。而SPL的 SplStack 對(duì)象則嚴(yán)格以堆棧的形式描述數(shù)據(jù),并提供對(duì)應(yīng)的方法。同時(shí),這樣的代碼應(yīng)該也能理解它在操作堆棧而非某個(gè)數(shù)組,從而能讓你的同伴更好的理解相應(yīng)的代碼,并且它更快。
棧的實(shí)現(xiàn)
$stack = new SplStack();
//入棧
$stack->push('a');
$stack->push('b');
//出棧
echo $stack->pop();
echo $stack->pop();
隊(duì)列的實(shí)現(xiàn)
$queue = new SplQueue();
//入隊(duì)列
$queue->enqueue('a');
$queue->enqueue('b');
$queue->enqueue('c');
//出隊(duì)列
echo $queue->dequeue();
echo $queue->dequeue();
echo $queue->dequeue();
最小堆的實(shí)現(xiàn)
$heap = new SplMinHeap();
//插入到堆
$heap->insert('a');
$heap->insert('b');
//從堆中提取數(shù)據(jù)
echo $heap->extract();
echo $heap->extract();
固定長(zhǎng)度的數(shù)組
$array = new SplFixedArray(5);
$array[1] = 5;
var_dump($array);