堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现。根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。二叉堆还常用于排序(堆排序)。
它是一个抽象类,必须实现compare()方法. 最大堆(SplMaxHeap)和最小堆(SplMinHeap)就是继承它实现的。最大堆和最小堆并没有额外的方法.
示例
<?php
namespace SPL\DataConstruct;
class MySplHeap extends \SplHeap
{
/**
* 此方法用来比较两个元素的大小,决定他们在堆中的位置
*
* @param mixed $value1
* @param mixed $value2
* @return mixed
*/
public function compare($value1, $value2)
{
return ($value2 - $value1);
}
}
$heap = new MySplHeap();
$heap->insert(1);
$heap->insert(2);
$heap->insert(2);
$heap->insert(3);
$heap->insert(0);
$heap->insert(4);
$heap->insert(1);
echo $heap->top().PHP_EOL; //3
echo $heap->count().PHP_EOL; //4
if(!$heap->isEmpty()){
$heap->rewind();
while($heap->valid()) {
var_dump($heap->current());
$heap->next();
}
}else{
echo 'empty';
}