20172322 《程序設計與數據結構》第四周學習總結
教材學習內容總結
- 列表的分類:有序列表、無序列表、索引列表,一共三類。
- 有序列表:在其中添加一個元素時,元素會自動去尋找本身應該在的位置,而列表的順序能夠由編寫者決定,每個新加的元素的位置是固定的。
- 無序列表:無序列表中的元素按照使用者所決定的的方式排序,使用者能夠在無序列表的任何位置添加元素而且將元素固定在該位置,可是他們也是有順序的,只是這種順序與元素自己無關。
- 索引列表:在Java集合API中所提供的列表類主要就是索引列表書上的
Course
、ProgramOfStudy
和POSTester
就是利用Java集合API中所提供索引列表實現的。而Josephus
也是索引列表的一個體現。
- 跟以往相似,一樣是經過鏈表和數組分別實現列表,可是由於索引列表在Java集合API中已經存在,本章的主要內容講述瞭如何利用鏈表和數組去實現有序列表和無序列表。一樣的本章也提供了一個列表ADT裏面的基本方法
removeFirst
removeLast
remove
first
last
contains
isEmpty
size
toString
用於實現列表的基本功能。
- 數組實現列表基本功能:利用數組實現列表的操做比較簡單,書上也給出了大部分操做,而且由於實現列表的操做和實驗一的一些操做相似。值得一提的是
find
方法的巧妙利用,由於布爾值的整形意義正好表明着0和-1,因此在contains
操做中直接利用了這個0和-1返回布爾值。
- 數組實現有序列表:書上代碼已經直接給出了實現方法,也爲以後利用鏈表實現提供必定的參考。重點是,只有Comparable對象才能儲存在有序列表表中。
- 數組實現無序列表:在中間插入的方法
addAfter
已經給出,最大的一個問題已經解決,注意該方法須要輸入的兩個元素前面一個纔是插入的元素,可是其實能夠本身更改。
- 鏈表實現列表基本功能:書上只提供了
remove
操做,可是該方法中提供的遍歷整個列表的方法爲以後實現contains
方法提供了幫助。
- 鏈表實現有序列表和無序列表:這一部分書上沒有給出任何參考。
教材學習中的問題和解決過程
- 問題一:本章的代碼實在是有點多了…本章教材一共30頁,代碼內容佔到了15頁左右
- 問題一解決方案:在國慶假期中手都快要敲斷了才敲完了這麼多代碼,代碼量一會兒就上去了。
- 問題二:本次的PP項目看似很少也就3個項目,可是在實際實現的時候卻發現完成這三個項目須要完成7個PP項目…
- 問題二解決方案:其實我也是在編寫第一個PP項目的測試類時才發現的,用數組實現列表的基本功能裏沒有添加元素...
- 問題三:
instantof
方法是用來幹嗎的?
- 問題三解決方案:參考百度百科——instantof,instanceof是Java、php的一個二元操做符(運算符),和==,>,<是同一類東西。因爲它是由字母組成的,因此也是Java的保留關鍵字。它的做用是判斷其左邊對象是否爲其右邊類的實例,返回boolean類型的數據。
代碼調試中的問題和解決過程
在實現的過程當中也參考了部分網上的內容,內容來源:用鏈表實現3種類型的線性表(有序鏈表、無序鏈表、索引鏈表)php
- 問題一:在編寫利用數組實現列表基本功能
last
和removeLast
時在測試調用該方法後老是顯示last
是null而removeLast
方法老是報錯。
- 問題一解決方案:利用Debug方法單步調試,發現是由於數組的索引值是從0開始的,而我利用的刪除和顯示最後一個均讓索引值等於了列表的長度,致使我所獲得的是列表最後一個值的下一個,因此是null,因此會報錯。
- 問題二:在編寫
LinkedList
和LinkedOrderedList
後測試時,老是會拋出錯誤NullPointException
,可是利用DeBug單步調試時能夠發現元素是已經添加到了列表之中。
- 問題二解決方案:通過屢次的嘗試和調試,發現
first
方法能夠正常使用,便將first
方法和其餘方法進行對比,發現問題的根源在於:我在寫first
方法時令了一個新的變量front
它的存在做用與head
相似,也是整個鏈表的開頭,可是在其餘的方法中我將front
和head
混用了,致使整個鏈表的丟失。我將全部的front
和head
作了一個整合後解決了問題。
- 問題三:在測試
LinkedList
時發現方法first
和last
調取的值是同樣的,均是列表的前端元素也就是first
的值。
- 問題三解決方案:返回查看
first
和last
的代碼,發現當初寫的時候我是直接複製粘貼的,應該準備以後改正卻忘記了...便改了改...
LinearNode<T> last = head;
for (int i = 0; i<count-1;i++)
{
last = last.getNext();
}
return last.getElement();
上週考試錯題總結
上週考試全對,沒有錯題。有兩次考試....忘了前端
- 錯題1:
- 理解:這裏的top相似於鏈表中用於計數的count,並非指的棧頂元素
- 錯題2:
- 理解:多態的引用能夠隨時間的改變而改變引用。
- 錯題3:
- 理解:眼瞎,沒讀懂是啥意思。
- 錯題4:
- 理解:棧頂是前端。
結對及互評
- 博客中值得學習的或問題:
- 範雯琪同窗的博客課本上的學習內容總結部分寫得十分詳細,值得學習。
- 每次看到範雯琪同窗的博客本身都比較慚愧,實在是很是優秀,可想而知她在博客這一方面所作出的努力,我也很是想向她學習。
- 代碼量其實能夠直接點擊查看本週的文件夾裏的代碼,會方便一些。
- 代碼中值得學習的或問題:
- commit提交的解釋清晰明瞭,我以爲我應該學習。
點評過的同窗博客和代碼
- 本週結對學習狀況
20172303java
- 結對學習內容
- 咱們一塊兒實現了本週須要實現的一些PP項目而且給互相講述了其中的基本原理。
- 給我解釋了一些錯題中沒法理解的問題,第一題就是她爲我詳細講解的。
其餘
- 感悟:最近一個月所學習的內容主要就是對鏈表和數組的一些深刻實踐,不管是棧、隊列仍是本次的鏈表,基本的實現方法都是相似的,基礎打好了遇到的困難都不是太多。
課本單詞
(本部分用於收集本章節後的生詞)git
- Ordered List:有序列表
- Unordered List:無序列表
- Indexed List:索引列表
- natural ordering:天然排序
- selialization:串行化
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
0/5000 |
2/2 |
8/8 |
認真學習!積極向上 |
第二週 |
812/812 |
1/3 |
22/30 |
|
第三週 |
814/1626 |
1/4 |
20/50 |
|
第四周 |
1386/3012 |
2/6 |
20/70 |
愉快的國慶節就要結束了... |
計劃學習時間:20小時數組
實際學習時間:20小時數據結構
改進狀況:在國慶假期中愉快的學習Java。學習
參考資料