20172304 《程序設計與數據結構》第四周學習總結
教材學習內容總結
第六章主要介紹了列表,這個列表是一種概念上的籠統的定義。
列表包括鏈表和數組。
列表分爲:有序列表,無序列表,索引列表。
有序列表 | 其元素按照元素的某種內在特性進行排序。 |
---|---|
無序列表 | 其元素件不具有內在順序,元素按照他們在列表中的位置進行排序 |
索引列表 | 其元素可以用數字索引來引用 |
有序列表和無序列表在插入式有區別,有序列表需要做到插入之後還是有序的。而無序列表不是這樣的。而索引列表雖然可以通過索引進行插入,刪除操作,但是還是要保持連續。要做到索引之間是連續的。
java集合API中的列表
方法 | 描述 |
---|---|
add(E element) | 往列表的末端添加一個元素 |
add(int index,E element) | 在指定索引出插入一個元素 |
get(int index) | 返回指定索引處的元素 |
remove(int index) | 刪除指定索引處的元素 |
remove(E object) | 刪除指定對象的第一個出現 |
set(int index,E element) | 替代指定索引處的元素 |
size() | 返回列表中的元素數量 |
使用無序列表:學習計劃
其中的Course類定義了一些課程的信息例如系名,成績等等。然後其中的ProgramOfStudy則是對Course類進行管理,做一些鏈表的基本操作。除此之外還添加了替換,查找等一些維護課程的必要操作。
索引列表應用實例:Josephus問題
這個就是隔幾取一的問題。通過鏈表實現
列表ADT、
公共操作
操作 | 描述 |
---|---|
removeFirst | 從列表中刪除第一個元素 |
removeLast | 從列表中刪除最後一個元素 |
remove | 從列表中刪除某個元素 |
first | 查看位於列表前端的元素 |
last | 查看位於列表末端的元素 |
contains | 確定列表是否含有某個元素 |
isEmpty | 確定列表是否爲空 |
size | 確定列表中的元素數量 |
有序列表
操作 | 描述 |
---|---|
add | 往列表中添加一個元素 |
無序列表
操作 | 描述 |
---|---|
addToFront | 把元素添加到列表的前端 |
addToRear | 把元素添加到列表的末端 |
addAfter | 把元素添加到列表中某個一直元素的後面 |
使用數組實現列表
使用鏈表實現列表
教材學習中的問題和解決過程
- 問題1:串行化的問題
- 問題1解決方案:書上提了一嘴有關串行化的概念,但是並沒有深入的講解,後來通過查閱資料得知,串行化可以將數據轉換爲字節流,也就是計算機最基本的數據結構——二進制,這使得串行化後的數據可以儲存在任何儲存空間。但是串行化只能應用在非靜態方法和變量。而且必須實現Serializable接口。
代碼調試中的問題和解決過程
由於這次進行的內容之前已經進行過很多次了(即鏈表和數組的),所以遇見的問題很少。問題1:在進行測試時發現無法引用變量。還有toString方法沒有辦法正常調用
問題1解決方案:後來發現是沒有加運行函數。還有在toString的函數裏沒有將那個環形數組中開頭的索引值隨循環做自減運算。
代碼託管
代碼截圖
錯題總結
第三週&第四周錯題
錯題一:
錯題一解答:
棧的pop操作返回的顯然是一個元素而不是一個節點,這是當時馬虎。
錯題二:
錯題二解答:後來在編碼過程中實踐了是正確的。
錯題三:
錯題三解答:後面已經說了不是引用的類型,但是我還是錯選了C,應該選A對象的類型。
錯題四:
錯題四解答:集合中儲存的對象只包含對象本身,並不會有其具體實現的細節。
錯題五:
錯題五解析:這是很明顯得是,在單向列表中,其中常的打印方式必然是從頭部開始的,對應實現的棧的出入棧操作也是在鏈表的頭部,也就是前部實現的。
第五週
錯題一:
錯題一解析:這道題我記得一開始我也想選A來着,知識不知道後來莫名其妙的選擇了B。
博客互評
點評過的同學博客和代碼
其他(感悟、思考等,可選)
本週主要學習了列表,在我的認知中,列表就是包括鏈表和數組。經過了這麼長時間的打磨歷練,好像數組與鏈表的知識都已經掌握了,聽老師說後面的束河圖就要利用鏈表和數組方面的知識,不知道還要經過多少次考驗。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 30/30 | 1/1 | 10/10 | |
第二週 | 766/796 | 1/2 | 40/50 | |
第三週 | 817/1613 | 1/3 | 20/70 | |
第四周 | 1370/3983 | 2/5 | 30/100 |
參考資料
1.藍墨雲班課
2.java軟件結構與數據結構
3.Java串行化問題