1. 程式人生 > >關於佇列和時間複雜度的問題

關於佇列和時間複雜度的問題

用迴圈單鏈表表示的佇列長度為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)