1. 程式人生 > >20172324 2018-2019-1 《程序設計與數據結構》第四周學習總結

20172324 2018-2019-1 《程序設計與數據結構》第四周學習總結

變量 指定元素 重新 count 簡單 ali 容量 異常 鏈表實現

20172324 2018-2019-1 《程序設計與數據結構》第四周學習總結

教材學習內容總結

列表集合

列表 說明
有序列表 其元素按照元素的某種內在特性進行排序
無序列表 其元素間不具有內在順序,元素按照它們在列表中的位置進行排序(不要被名字誤導,按照特殊順序擺放,只是這種順序與元素本身無關)
索引列表 其元素可以用數字索引來引用

索引列表和數組的根本區別在於索引列表的索引值總是連續的。

Java API中的列表

方法 描述
add(E element) 往列表的末端添加一個元素
add(int index, E element) 在指定索引處插入一個元素
get(int index) 返回指定索引處的元素
remove(int index) 刪除指定索引處的元素
remove(o object) 替代指定索引處的元素
set(int index,E element) 返回列表中的元素數量
size() 返回列表中的元素數量

使用數組實現列表

  1. 基於數組實現的列表首先要把列表的一端固定在索引0處,設置一個整數變量rear表示列表中的元素數目,同時表示列表末端的下一個可用位置。
  2. remove操作查找作為參數傳遞的元素,如果找到就從列表中刪除,然後數組中更高引索的元素向下平移以填補空隙
  • find方法用於查找制定元素,若存在便返回索引值
    • 好處
      • 使remove操作變得簡單。
      • 能用find方法來實現其他操作及方法
      • 不會拋出異常
  • continue方法該操作用於判斷指定元素是否在列表中
  • add方法要進行多次比較和平移操作
  • 無序列表的特有操作
    • addToFront(復雜度為O(n))和addToRear(O(1))
    • addAfter
      • 兩個參數,一個表示要添加的元素,一個表示目標元素,類似於remove和add操作,復雜度位O(n)

使用鏈表實現列表

  • 鏈表實現的remove操作不需要平移元素,但有四種情況:
    • 要刪除的是列表的唯一元素
    • 要刪除列表的首元素
    • 要刪除列表的尾元素
    • 要刪除列表的中間元素。
    在這些所有情況下,count都遞減1,而在其中仍然存在要進行n次比較操作的情況,因此其時間復雜度也為O(n)。

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

  • 問題1:列表與鏈表的關系
  • 問題1解決方案:鏈表是一種實現策略,列表可以用鏈表或數組來實現,列表集合沒有內在的容量大小,可以隨著需求增大而增大1

  • 問題2:instanceof的用法
  • 問題2解決方案:
    A instanceof B ,返回值為boolean類型,用來判斷A是否是B的實例對象或者B子類的實例對象。如果是則返回true,否則返回false。

Person p = new Person() ; //
   Man m = new Man() ; //Man是Person的子類
   Animal a = new Animal() ;
   m instanceof Man //返回true
   m instanceof Animal//返回false
   m instanceof Person//返回true

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

  • 問題一:做pp5.2的時候題目要求自己編寫toString方法,但是編完之後就提示有錯誤,錯誤在自己遍的toString方法上。
  • 問題一解決方案:之前看書的時候沒有註意這一句:“toString會變得更加復雜,因為元素不是從0處開始存儲的,而且還可能會環繞數組的末端。”而我之前是直接復制5.1中的toString方法改的,所以出現了問題,發現問題重新改過之後就沒有報錯了

代碼托管

上周考試錯題總結

結對及互評

點評過的同學博客和代碼

  • 本周結對學習情況
    • 結對同學學號21
    • 結對學習內容
      • XXXX
      • XXXX
      • ...
  • 上周博客互評情況
    • 學號1

其他(感悟、思考等,可選)

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 0 1/1 20/20
第二周 300/500 1/2 18/38
第三周 300/600 1/3 18/38

參考資料

  • 《Java程序設計與數據結構(第四版)》
  • 隊列和棧都是運算受限的線性表,只允許在表的兩端進行運算

20172324 2018-2019-1 《程序設計與數據結構》第四周學習總結