教材學習內容總結
第五章
隊列
1.隊列是先進先出的數據結構(FIFO)與棧不一樣,隊列的兩端可分別進行操做html
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相似,表示隊列中的元素個數,以及數組中下一個空閒單元。post
用數組實現隊列
- 基於數組的隊列實現策略就是將隊列的某一端(好比前端)固定在數組的索引0處。全部元素會不間斷地存放在數組中。
- 與ArrayStack實現中的top變量相似,整型變量rear用於代表數組中的下一個空閒單元。
- 注意:rear還表示了隊列中的元素數目。
用鏈表實現隊列學習
- 除了一個指向鏈表首元素的引用(head)以外,還須要跟蹤另外一個指向鏈表末元素的引用(tail),還要用一個整型變量count來跟蹤隊列中的元素數目。
- 往鏈表前端添加新結點,應該將該新結點的next指針設置爲指向鏈表的head變量,把head變量設置爲指向新結點。
- 往鏈表的末端添加新結點,應該將把鏈表末端結點的next指針設置爲指向新結點,而後把鏈表的tail設置爲指向新結點。
教材學習中的問題和解決過程
- 問題1:dequeue的操做複雜度爲什麼爲O(1).
-
問題1解決方案:當調用 .dequeue() 時,會從序列中刪除下一個函數,而後執行它。該函數反過來會(直接或間接地)引起對 .dequeue() 的調用,這樣序列才能繼續下去。——摘自百度百科spa
- (http://www.javashuo.com/article/p-msnlzllo-me.html)1.每次 新元素進棧的時候,棧裏面的元素須要排序2.讓最小的或者最大的元素位於棧頂,這樣就能夠在O(1)時間內得到最小或者最大的值了,3.上面的想法 不能保證,進棧(進了隊列)以後 ,出去的元素的順序,所以只有一個棧是不行的4.要有個保存最小或者最大的元素,每次進棧的時候,跟這個數比較,存起來,5.可是有個問題,就是你最大的元素(或者最小的元素出去)了以後,你該怎麼去更新這個值呢,6.就是隻 維持一個變量是不夠的7.最小元素或者最大元素出棧以後,要可以保證次小元素立馬填補如今這個位置,也就是說,咱們須要把次小元素和最小元素都保存起來,放到另外的一個輔助棧裏面。
代碼調試中的問題和解決過程
具體沒有什麼特別的問題,只有一些代碼的不規範問題。(大小寫已經成爲習慣,但願我不會被槍殺。)設計
碼雲連接