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

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

教材學習內容總結

在上週學習完關於棧的知識事後,這周咱們學習了關於隊列的知識。html

  • 隊列與棧最大的不一樣就是隊列是FIFO(先進先出)。
  • 在Java API中提供了棧,可是卻沒有提供隊列類,可是它卻提供了一個Queue接口,這個接口由多個類來實現。在Queue接口中定義了一個element方法,用於獲得隊列前端的值,提供了兩個方法addoffer用於添加和插入元素,另外pollremove從隊列中刪除元素。
  • 代碼密鑰是隊列使用的一個鮮明的例子,利用隊列儲存密鑰可使得代碼密鑰得以屢次使用。
  • 和上週相似,本週也是分別經過鏈表和數組的形式來實現隊列。與StackADT相似,此次也有一個名爲QueueADT的接口,咱們的主要任務也是實現它的enqueue dedqueue first isEmpty size toString
    • 鏈表方式實現隊列:enqueue操做,在隊列末端添加一個新元素,將當前末尾元素的next引用指向須要添加的新元素,而且將tail引用設置爲新元素。dequeue操做刪除隊列前端的元素直接令head = head.getNext便可,不過須要注意當刪除掉隊列的最後一個元素後,headtail的引用都是null。其餘須要實現的內容在後面部分會說起。
    • 數組方式實現隊列:普通的線性數組在處理隊列問題時的空間複雜度很高,故在書中使用了環形數組來實現隊列(環形數組:數組的最後一個索引後面跟的是第一個索引),enqueue dedqueue 的實現引入了取餘操做符%以便rearfront的值無誤。

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

  • 問題1:書上有一句話「對於隊列,咱們是在其兩端進行操做的,而順序也不是可有可無的了,所以,用固定數組來實現的效率不高」,我當時讀到這句話的時候十分疑惑,隊列的順序很重要因此實現棧的效率不高?
  • 問題1解決方案:對比以前書上所提到的「固定數組實現策略是對棧高效的」,而且在網上查閱資料獲得,這句話是書本的一個問題,應該是「用固定數組來實現隊列的效率不高」

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

在上週學習了分別使用鏈表和數組來實現棧之後,本週利用數組和鏈表來實現對流相對簡單,僅須要對部分代碼進行修改便可,但仍是存在了一個問題:前端

  • 問題1:在對環形數組類CircularArrayQueue進行補全時前面幾個方法都比較簡單,可是sizetoString方法出現了問題。
  • 問題1解決辦法:通過一系列的驗證發現問題的產生是出現size方法上,由於toString方法調用了size
  • 解決此次問題我使用了三種方法:java

  • 第一種:git

  • 致使的問題:編程

致使了數組的長度爲1600,而且出現了很是多的null。數組

  • 第二種:數據結構

  • 致使的問題:模塊化

size方法調用顯示的仍是刪除之前的樣子。單元測試

  • 第三種:學習

我在網上查閱相關資料(《JAVA-循環數組實現簡單的隊列》)之後,問題終於得以解決。

代碼託管

上週考試錯題總結

上週沒有考試,故也沒有錯題。

結對及互評

  • 博客中值得學習的或問題:
    • 在她的博客中「循環隊列」和「順序隊列」使用了圖解的方法,更便於理解。
  • 代碼中值得學習的或問題:
    • 在博客中體現了許多代碼,更加方便,值得學習

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172303

    • 結對學習內容
      • 主要討論了藍墨雲的課堂實踐內容,對於用鏈表實現插入和刪除的功能進行了深刻地探討

其餘

  • 感悟:學會了基本的鏈表與數組的知識事後對於利用這二者來實現不管是棧或是隊列都比較簡單。

課本單詞

(本部分用於收集本章節後的生詞)

  • Ceasar cipher:凱撒加密法
  • circular array:環形數組
  • dequeue:隊列操做,前端刪除一個元素
  • enqueue:隊列操做,尾端增長一個元素
  • FIFO:先進先出
  • queue:隊列
  • repeating key:重複密鑰

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/5000 2/2 8/8 認真學習!積極向上
第二週 812/812 1/3 22/30
第三週 814/1626 1/4 20/50
  • 計劃學習時間:20小時

  • 實際學習時間:20小時

  • 改進狀況:繼續加緊學習的腳步。

補充做業

技能 課前評估 課後評估
對編程總體的理解 4 8
程序理解 4 8
構架設計,模塊化設計,接口設計 3 8
單元測試,代碼覆蓋率 5 9
代碼質量 3 8
效能分析和改進 2 7

參考資料

相關文章
相關標籤/搜索