PHP标准库(SPL)学习之SplHeap

发布于 2017-03-07 00:44:18 阅读 276

堆(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';
}