优先队列-双端堆

来源:互联网 发布:好的数据圈网站 编辑:程序博客网 时间:2024/05/18 02:41

   第一篇博客,就写用了一个下午做的课程设计作业吧~

   作业题目:编写一个优先队列,完成  查找,删除,插入 操作。且每个操作的时间复杂度要在(logn)内。

   其实很早前就拿到这个题目了,只是一直没定下用那种数据结构做,在图书馆借了本数据结构的书,认真的看了,小堆-大堆,左高树,双端堆,二项树等数据结构。决定选择双端堆,来完成我的课程设计作业。

   双端堆,可看成2颗树:1.根节点为空

                                             2.左子树为小顶堆

                                             3.右子树为大顶堆 

                                             4.左子树中的值比对应右子树的节点的值小。若对应的右子树节点为空,则对应点为其父节点。

  个人认为这种数据结构还是蛮简单方便的,当然,为了更简便,我使用了2个数组来模拟小顶堆和大顶堆。

   编写起来,取得了蛮好的效果。~

   查询最大优先队列的元素,和最小优先队列的元素,时间复杂度为o(1)

   因为数组的第一个元素便是我们所需要得要的元素。

   而插入操作,只要判断应该插入那棵树,也将是O(1),然而之后需要调整,此时的时间复杂度在O(logN) 内。

   删除操作,也是将数组中的第一个数删除。O(1),删除之后,调整堆时,时间复杂度也在O(logN)内。


      等代码优化后,将代码贴上来。





原创粉丝点击