关于队列和时间复杂度的问题

用循环单链表表示的队列长度为n

若只设头指针,则出队和入队的时间复杂度分别是( 含头结点时为O(1)、不含头结点时为 O(n) )和(O(n));

若只设尾指针,则出队和入队的时间复杂度分别是(O(1))和( O(1))。 为什么呢??


原因:

a) 如果只有头指针,且含头结点
1. 出队: O(1),因为只要把头结点的下一个结点删除就好了
2. 入队: O(n),要把新的结点插入到队尾,必须把队列历遍,找到队尾,才能插入

b) 如果只有头指针,不含头结点
1. 出队: O(n),要把头结点删除,必须历遍队列,找到队尾,才能更新头指针 (循环单链的缘故,如果仅仅是普通单链,则本操作也是O(1) )
2. 入队: O(n),同 (a).2

c) 如果只有尾指针
1. 出队: O(1),只要把尾指针的下一个结点(没有头结点的情况)或者下下个结点(有头结点的情况)删除即可
2. 入队: O(1),只要在尾指针的后面插入新的结点,并更新尾结点,所以是O(1)

    原文作者:舞伴问题
    原文地址: https://blog.csdn.net/WYpersist/article/details/80261309
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞