SPL SplHeap 堆

SplHeap  

简介

堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

  • 堆中某个节点的值总是不大于或者不小于期父节点的值。
  • 堆总是一颗完全二叉树

有人会问 什么是 完全二叉树?首先你得知道什么是满二叉树。满二叉树的定义是:“除了最后一层无任何子节点外,每一层上的所有的节点都有两个子节点的二叉树叫满二叉树。”请注意,如果一棵树的层级为n,n-1层的节点都必须有两个子节点,才能被称为满二叉树。

完全二叉树的定义是:一颗深度为k的有n个节点的二叉树,对树中的节点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n) 的节点与满二叉树中编号为i的节点在二叉树中位置相同,则这棵树成为完全二叉树。

回归正题,我们这里介绍的类是一个抽象类,实现了Iterator , Countable接口,后面要介绍的最大堆(SplMaxHeap)和最小堆(SplMinHeap)就是继承他实现的。

abstract class SplHeap implements Iterator, Countable {

       /**
        * [extract description] 从堆顶部提取一个节点并重建堆
        * @return [type] [description]
        */
        public function extract () {}

       /**
        * [insert description] 向堆中增加一个节点并重建堆
        * @param  [type] $value [description]
        * @return [type]        [description]
        */
        public function insert ($value) {}

        /**
         * [top description] 返回堆顶部的节点
         * @return [type] [description]
         */
        public function top () {}

       /**
        * [count description] 返回堆中元素个数
        * @return [type] [description]
        */
        public function count () {}

        /**
         * [isEmpty description] 判断是不是空堆
         * @return boolean [description]
         */
        public function isEmpty () {}

       /**
        * [rewind description] 重置迭代指针
        * @return [type] [description]
        */
        public function rewind () {}

       	/**
       	 * [current description] 返回当前迭代指针指向的节点
       	 * @return [type] [description]
       	 */
        public function current () {}

      	/**
      	 * [key description] 返回当前迭代指针指向的键
      	 * @return [type] [description]
      	 */
        public function key () {}

        /**
         * [next description] 迭代指针到下一个节点
         * @return function [description]
         */
        public function next () {}

       /**
        * [valid description] 判断当前指针指向的节点是否存在
        * @return [type] [description]
        */
        public function valid () {}

       /**
        * [recoverFromCorruption description] 恢复堆
        * @return [type] [description]
        */
        public function recoverFromCorruption () {}

       /**
        * [compare description] 抽象方法 比较两个节点的大小(子类继承中必须实现)
        * @param  [type] $value1 [description]
        * @param  [type] $value2 [description]
        * @return [type]         [description]
        */
        abstract protected function compare ($value1, $value2);
        /**
         * [isCorrupted description] 判断堆结构是否被破坏了
         * @return boolean [description]
         */
        public function isCorrupted(){}

}

上面介绍的方法中只有compare是抽象方法,后面我们介绍的最大堆和最小堆就是重写此方法实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值