1. 程式人生 > >20172312 2018-2019-1 《程序設計與數據結構》第3周學習總結

20172312 2018-2019-1 《程序設計與數據結構》第3周學習總結

queue 分享 html ora ack 復雜 我不 順序 tar

教材學習內容總結

第五章

隊列

1.隊列是先進先出的數據結構(FIFO)與棧不同,隊列的兩端可分別進行操作

2.first與front相同,返回首段的值

3.API中的隊列方法,有add,element,offer,peek,poll,remove

4.用鏈表實現隊列時,enqueue和dequeue的算法復雜度均為O(1)

5.用數組實現隊列時,enqueue和dequeue的算法復雜度均為O(n),因為無論將索引值定為頭或者尾,插入或刪除時,總會使得所有元素位置發生改變。

6.非環形數組實現的元素位移,將產生O(n)的復雜度。

7.由數組實現的隊列中,rear和棧中的top類似,表示隊列中的元素個數,以及數組中下一個空閑單元。

技術分享圖片

用數組實現隊列

  • 基於數組的隊列實現策略就是將隊列的某一端(比如前端)固定在數組的索引0處。所有元素會不間斷地存放在數組中。
  • 與ArrayStack實現中的top變量類似,整型變量rear用於表明數組中的下一個空閑單元。
  • 註意:rear還表示了隊列中的元素數目。

    技術分享圖片

    技術分享圖片

    技術分享圖片

用鏈表實現隊列

  • 除了一個指向鏈表首元素的引用(head)之外,還需要跟蹤另一個指向鏈表末元素的引用(tail),還要用一個整型變量count來跟蹤隊列中的元素數目。
  • 往鏈表前端添加新結點,應該將該新結點的next指針設置為指向鏈表的head變量,把head變量設置為指向新結點。
  • 往鏈表的末端添加新結點,應該將把鏈表末端結點的next指針設置為指向新結點,然後把鏈表的tail設置為指向新結點。

技術分享圖片技術分享圖片

技術分享圖片

教材學習中的問題和解決過程

  • 問題1:dequeue的操作復雜度為何為O(1).
  • 問題1解決方案:當調用 .dequeue() 時,會從序列中刪除下一個函數,然後執行它。該函數反過來會(直接或間接地)引發對 .dequeue() 的調用,這樣序列才能繼續下去。——摘自百度百科

  • (https://www.cnblogs.com/wust221/p/5396263.html)1.每次 新元素進棧的時候,棧裏面的元素需要排序2.讓最小的或者最大的元素位於棧頂,這樣就可以在O(1)時間內獲得最小或者最大的值了,3.上面的想法 不能保證,進棧(進了隊列)之後 ,出去的元素的順序,因此只有一個棧是不行的4.要有個保存最小或者最大的元素,每次進棧的時候,跟這個數比較,存起來,5.但是有個問題,就是你最大的元素(或者最小的元素出去)了之後,你該怎麽去更新這個值呢,6.就是只 維持一個變量是不夠的7.最小元素或者最大元素出棧之後,要能夠保證次小元素立馬填補現在這個位置,也就是說,我們需要把次小元素和最小元素都保存起來,放到另外的一個輔助棧裏面。

代碼調試中的問題和解決過程

具體沒有什麽特別的問題,只有一些代碼的不規範問題。(大小寫已經成為習慣,希望我不會被槍殺。)

碼雲鏈接

結對及互評 —— 見下方評論

參考資料

https://www.cnblogs.com/wust221/p/5396263.html)

20172312 2018-2019-1 《程序設計與數據結構》第3周學習總結