20172311《程序設計與數據結構》第四周學習總結

20172311《程序設計與數據結構》第四周學習總結

教材學習內容總結

第六章 列表

  • 列表可使用鏈表或數組來實現
  • 隊和棧的元素只能在末端添加和刪除,而列表集合更通常化,能夠在列表的中間和末端添加和刪除元素
  • 列表能夠分爲有序列表、無序列表和索引列表
  • 有序列表往列表添加新元素,就要查找新元素相對於全部已有元素的正確排序
  • 無序列表中的元素按使用者所選擇的任意方式排序
  • 索引列表爲它的元素維護一段連續的數字索引值
  • 索引列表和數組的根本區別在於:索引列表的索引值老是連續的
  • 爲了使某個對象能使用串行化進行存儲,其類必須實現Serializable,在Serializable接口中並無任何方法,它只是代表該對象能夠轉換爲串行化表示形式
  • 索引列表特有的操做,能夠利用其索引來很好地使用引用元素
  • 只有Comparable對象才能存儲在有序列表中
  • 無序列表的aadAfter方法必須首先找到目標元素,把更高索引處的元素平移以騰出空間,而後把新元素插入到目標元素的後面
  • 列表之間的區別在於如何添加元素
  • 接口能夠用來派生其餘接口,子接口包含父接口的全部抽象方法
  • 接口名能夠用來聲明一個對象引用變量,一個接口引用能夠用來引用實現了該接口的任意類的任意對象
  • 接口容許咱們建立多態引用,其中被調用的方法是基於被引用時的特定對象的

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

  • 問題:爲何用數組實現列表時沒有用環形數組,與用數組實現隊列時有何區別?html

  • 問題解決方案:經過研讀課本得知。首先對於非環形數組數組實現隊列假定隊列的首元素老是存儲在數組的索引0處,因爲隊列處理會影響該集合的兩端,所以在刪除元素時,該策略要求移動元素,使得dequeue操做的複雜度爲O(n),數組實現的操做選使得效率低,而把數組看作環形的,能夠去除在隊列的數組實現中把元素位移的須要。而對於使用數組實現列表,通常的列表也能夠從兩端添加和刪除元素,可是它們還有從列表中間插入或刪除元素,所以沒法避免要移動元素,也可使用環形數組方法,可是當從列表中間插入或者刪除元素,仍然須要移動元素,於是使用環形數組就顯得沒有必要了git

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

  • 問題1:用數組實現的有序列表類在測試時出現以下錯誤:

    報錯代碼以下:
    數組

  • 問題1解決方案:剛開始我覺得是個人數組實現的有序列表裏的add方法有問題,通過單步調試發現是由於我既加入了int型對象,又加入了String型對象,而該add方法可以進行排序的前提是全部的添加對象都是可比較的同一類型的對象,改正事後的測試類及運行結果截圖以下:
    數據結構

  • 問題2:pp6.17運行測試類時發現contain方法含有空指針異常,運行結果以下:

    錯誤contain方法以下:
    學習

  • 問題2解決方案:通過單步調試發現是邏輯上的錯誤形成的,在判斷是否含有時應該首先判斷是否爲空,初步修改後仍有空指針錯誤,報錯代碼以下:

    再經單步調試發現一樣是邏輯錯誤,在獲得元素前首先應該判斷是否爲空,最終修改後正確的contain方法以下:
    測試

代碼託管

上週考試錯題總結

  • 錯題1:
    .net

  • 理解:定義良好的接口掩蓋了集合的實現設計

  • 錯題2:
    3d

  • 理解:繼承的變量和方法能夠在派生類中使用,就好像它們是在本地聲明的同樣。指針

  • 錯題3:

  • 理解:公共功能應該在合理的類層次結構中儘量高而不是儘量低,以最小化維護工做

  • 錯題4:

  • 理解:實現基於數組的堆棧的最有效方法是將堆棧的底部而不是保持在數組的0位置

  • 錯題5:

  • 理解:對象引用變量可用於建立鏈式結構

  • 錯題6:

  • 理解:堆棧的連接實現從鏈表的front進行

結對及互評

  • 本週結對學習狀況
    對課本上的諸多疑問點進行了討論,同時對代碼實現過程當中遇到的一些問題也經過討論得以解決,繼續一塊兒努力吧!

感想

遇到細節問題時不要毛躁,要冷靜分析,慢慢尋找錯誤,有助於問題的解決!!!!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 4/4
第二週 464/464 1/2 10/14 理解掌握了用數組和鏈表實現棧的方法
第三週 494/958 1/3 10/24 理解掌握了用數組和鏈表實現隊列的方法
第四周 1629/2587 2/5 20/44 對用鏈表和數組實現列表進行了學習
  • 計劃學習時間:15小時

  • 實際學習時間:20小時

  • 改進狀況:繼續強化代碼編寫能力!!

參考資料

相關文章
相關標籤/搜索