优先队列-双端堆

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

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

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

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

                                             2.左子树为小顶堆

                                             3.右子树为大顶堆 

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

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

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

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

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

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

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


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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值