20172304 《程序設計與數據結構》第三週學習總結
教材學習內容總結
第五章主要對隊列進行了介紹,隊列從一端進入從量一端刪除,隊列遵循先進先出的原則(First in First out FIFO)
隊列ADT應該包含的方法:
操作 | 說明 |
---|---|
enqueue | 向隊列末端添加一個元素 |
dequeue | 從隊列前端刪除一個元素 |
first | 考察隊列前端的那個元素 |
isEmpty | 判定隊列是否爲空 |
size | 判斷隊列中的元素數目 |
toString | 返回對列的字符串表示 |
java集合API提供了java.util.Stack類,它實現了棧集合。沒有提供隊列類。而是提供了一個Queue的接口,由多個類實現
隊列的應用:
代碼密鑰:使用隊列儲存密鑰,可以重複使用,對密文進行加解密。
售票口模擬:現創立一個Customer類,儲存顧客的時間。使用隊列模擬客戶的實踐,進行試驗來模擬售票口的情況,最後確定最佳的售票口數量。
隊列的實現:
使用鏈表實現隊列:需要定義兩個指針,一個head,一個tail,還有一個統計元素數量的int值count,方便在隊首和隊尾,進行插入和刪除。雙向鏈表實現比單鏈表容易。
使用數組實現隊列:用兩個整數型變量rear,和front來表示數組的頭和尾(注意在這裏,兩個整數型不代表儲存的位置,而是表示隊列的順序,在採用環形數組是,更要注重對rear和front把握,否則就會丟失隊列中的數據)
教材學習中的問題和解決過程
- 問題1:有關環形數組的相關問題。
- 問題1解決方案:一開始真的很懵懂,環?怎麼能把數組掰彎!變成一個環?後來經過長期的艱苦奮鬥,終於理解了,這個環,在我的理解中並不是一個真正的環而是一個邏輯上的環,通過兩個索引值進行標記確定首尾,尾索引可以藉助“rear =(rear+1)%queue.length”這條語句在到達索引值上線時過渡到數組的首端,從而在真正的邏輯上形成一個真正環形數組。
代碼調試中的問題和解決過程
問題1:在進行測試時發現無法引用變量。還有toString方法沒有辦法正常調用
- 問題1解決方案:後來發現是沒有加運行函數。還有在toString的函數裏沒有將那個環形數組中開頭的索引值隨循環做自減運算。
問題2:發現一堆錯誤。
問題2解決方案:最終發現是自己實現的isEmpty方法有問題,後將if的判斷語句由(head.getelement==null)改爲(head==null)就OK了。
代碼託管
補充作業
技能 | 課前 | 課後 |
---|---|---|
Programming: Comprehension(程序理解) (如何理解已有的程序,通過閱讀,分析,debug) | 4 | 7 |
Programming: Design (架構設計, 模塊化設計,接口設計) | 2 | 6 |
Programming: Test (單元測試、代碼覆蓋率) | 2 | 4 |
Program: Performance (效能分析和改進) | 1 | 5 |
Programming: Code Review/Code Quality (代碼複審/代碼規範/代碼質量) | 1 | 3 |
Programming: Command line and files (處理命令行參數和文件系統) | 1 | 4 |
Personal Software Process (個人軟件過程) :個人源碼管理(TFS/GitHub) | 3 | 7 |
博客互評
- 博客中值得學習的或問題:
20172301 郭愷同學本週的博客局以往來看略顯遜色,內容不夠飽滿。不過對教材的知識深入的瞭解了。並且也吸收了學姐上週給他的評價,對教材上的知識總結進行了加深。
20172328 李馨雨同學 不虧爲學習部的經營教材內容總結的詳略得當,井井有條,對問題的理解和反省也十分到位,那一手環形數組的圖片更是深深的折服了我。
點評過的同學博客和代碼
其他(感悟、思考等,可選)
本週經過了緊張而充分的學習,學會了用鏈表實現隊列用數組實現隊列等。還接觸到了存在於邏輯上的數組——“環形數組”。感覺自己從靈魂上的到了昇華。路漫漫其修遠兮,吾將上下而求索。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 30/30 | 1/1 | 10/10 | |
第二週 | 766/796 | 1/2 | 40/50 | |
第三週 | 817/1613 | 1/3 | 20/7 |
參考資料
1.藍墨雲班課
2.java軟件結構與數據結構