第一篇博客,就写用了一个下午做的课程设计作业吧~
作业题目:编写一个优先队列,完成 查找,删除,插入 操作。且每个操作的时间复杂度要在(logn)内。
其实很早前就拿到这个题目了,只是一直没定下用那种数据结构做,在图书馆借了本数据结构的书,认真的看了,小堆-大堆,左高树,双端堆,二项树等数据结构。决定选择双端堆,来完成我的课程设计作业。
双端堆,可看成2颗树:1.根节点为空
2.左子树为小顶堆
3.右子树为大顶堆
4.左子树中的值比对应右子树的节点的值小。若对应的右子树节点为空,则对应点为其父节点。
个人认为这种数据结构还是蛮简单方便的,当然,为了更简便,我使用了2个数组来模拟小顶堆和大顶堆。
编写起来,取得了蛮好的效果。~
查询最大优先队列的元素,和最小优先队列的元素,时间复杂度为o(1)
因为数组的第一个元素便是我们所需要得要的元素。
而插入操作,只要判断应该插入那棵树,也将是O(1),然而之后需要调整,此时的时间复杂度在O(logN) 内。
删除操作,也是将数组中的第一个数删除。O(1),删除之后,调整堆时,时间复杂度也在O(logN)内。
等代码优化后,将代码贴上来。