当前位置: 首页 > 后端技术 > PHP

【SPL标准库专题(8)】数据结构:SplHeap&SplMaxHeap&SplMinHeap

时间:2023-03-29 21:33:43 PHP

Heap(堆)是一种为实现优先级队列而设计的数据结构。它是通过构造二叉堆(二叉树的一种)来实现的。根节点最大的堆称为最大堆或大根堆,根节点最小的堆称为最小堆或小根堆。二叉堆也常用于排序(堆排序)。classabstractabstractSplHeapimplementsIterator,Countable{/*方法*/public__construct(void)abstractprotectedintcompare(mixed$value1,mixed$value2)publicintcount(void)publicmixedcurrent(void)publicmixedextract(void)publicvoidinsert(mixed$value)publicboolisEmpty(void)publicmixedkey(void)publicvoidnext(void)publicvoidrecoverFromCorruption(void)publicvoidrewind(void)publicmixedtop(void)publicboolvalid(void)}从上面可以看出,由于类中包含了compare抽象方法,所以类一定是抽象类(不可实例化,只能被继承);最小堆和最大堆其实是对compare的抽象方法的一种算法的两种表述;也可以自己写一个类继承SplHeap,按照自己的方式排序;示例自定义排序堆类MySimpleHeapextendsSplHeap{//compare()方法用于比较两个元素的大小并确定它们在堆中的大小publicfunctioncompare($value1,$value2){return($value2-$值1);}}$obj=newMySimpleHeap();$obj->insert(4);$obj->insert(8);$obj->insert(1);$obj->insert(0);echo$obj->顶部();//8foreach($objas$number){echo$number;echoPHP_EOL;}最大堆和最小堆$heap=newSplMaxHeap();$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;$堆->下一个();}