当前位置 博文首页 > 文章内容

    队列和链表的区别

    作者:糖丝橙 栏目:IT相关内容 时间:2020-05-05 9:32:18

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



         面试官问:你了解队列和链表的区别吗?

         我:了解,blabla

         面试官又问:你能自己实现队列吗?具体讲讲怎么实现?

         我当时说了用链表来实现队列的存储,并实现push和pop的操作,但回答的不具体,面试官有些摇头。今天结合一道力扣题来实现队列

    题目

         请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1。

    e50ca7e03d8b5cbea5887d7f5da105a0.png

    解题思路:双链表实现

    max_value()

         如果MAXQueueHead == MAXQueueTail 表示队列中没有元素,返回-1。在MAXQueue的头指针的位置保存的就是此时队列中的最大值,直接的取值就可以,时间复杂度是O(1)

    push_back()

         Queue数组正常的进行添加数据,Queue[QueueTail++] = value;

         在进行入队的时候,在MAXQueue中需要进行判断,时间复杂度均摊下来也是O(1):比value小的值,一定会在value出栈前,先出栈,队列中的最大值最少都是value,就没有保存比value小的值的必要了,MAXQueueTail指向的索引,在数组MAXQueue中还没被赋值,判断的时候需要使用MAXQueueTail-1

         MAXQueue[MAXQueueTail-1] < value

    pop_front()

         Queue中Head的值 与 MAXQueue中Head的值相等,则两个数组中的head都要 ++ ,因为最大值已经变了。不然,就是常规的Queue中的head++,时间复杂度是O(1)

    解题代码(java)

    25b4b681e48e60daf8c352aff4545997.png


    文章来源:CSDN博客

    原文链接:https://blog.csdn.net/JAck_chen0309/article/details/104787837

    如有侵权,请联系本人删除