优先级队列(堆)

在java 中学习中我们会遇到两个堆,在这里我们不要搞混淆了,其中一个堆是值得计算机内存分布的一个堆,还有一个堆是指的数据结构中的堆.所以连个堆的意思是不一样的.

其实堆的本质事宜个数组,而实质上是一个完全二叉树.他是将二叉树的每个节点上的数据保存在一个数组中而每个位置上有对应的关系,如一个节点对的左子树的数据在数组的位置是2*parent+1的位置上,而右子树的位置是2*parent+2的位置上.而堆需要瞒住一下几个条件才可以称为堆(1) 逻辑上是一个完全二叉树

                               (2);堆的物理意义是保存在数组中

                              (3)满足任何节点的值都大于子树中的节点值,叫做大堆,反之,则是小堆

在学习堆中我们还要学会堆的操作(1)向下调整(2)建堆的操作.这两部操作是建堆的基础条件.

堆的应用:优先级队列(1)首先如队列-采用向上调整的方法.将元素插入尾部,之后向上调整.(2)出队列,将首部的元素和尾部的元素交换,之后再采用向下调整的方法,重新建堆.而在系统默认的堆是一个小堆,在调用表中库类时我们还是要小心.

posted @ 2020-04-08 16:43  哈哈,呵呵,嘿嘿  阅读(135)  评论(0)    收藏  举报