20172304 《程序設計與數據結構》第三週學習總結

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軟件結構與數據結構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章