20182327 2019-2020-1 《數據結構與面向對象程序設計》第七週學習總結
教材學習內容總結
- 一、算法、棧、隊列
- 二、算法優略可由增加函數斷定。
- 三、分爲時間和空間,時間只看最大位。
- 四、後綴表達式:有數字和符號計算。遇到數字將其放入棧頂。遇到符號就將棧頂- 五、兩個數用符號操做。棧頂爲被操做數。
- 六、棧的類型不定能夠用泛型,即不肯定類型,到實例化時再肯定類型。
- 七、棧是能夠經過集合實現的,top在初始化是爲0,以後會變成棧頂的+1.
- 八、ADT接口,能夠經過接口來實現棧。
- 九、棧有異常:1.入棧容量不夠 2.出棧時棧空 3.掃描完棧中值多於1
- 十、pop,peek,push等方法編寫類
- 十一、隊列與棧核心思想相似,是先進先出
- 十二、 查找算法的總結
- 線性查找,經過依次遍歷所要查找元素的集合,比較是否存在所需查找的元素,直到找到該元素或返回false代表集合不存在該元素。實現較爲簡單,==但當集合元素數量巨大時,效率極慢==。
-
- 二分法查找,經過每次將集合分爲兩部分,比較所需查找的元素位於中間元素的左半區仍是右半區,依次進行二分,直至找到元素,或返回false。效率較高,例如,一個含義一百萬元素的集合,只需20次左右便可完成查找。==但二分法的實現須要基於一個有序數組,不然沒法實現。==
- 1三、排序算法的總結
- 順序排序——選擇排序法,選擇排序法每遍歷列表依次,找到當前最小元素,將其與列表左側元素交換,最終將全部元素進行排序。
-
- 順序排序——插入排序法,從最左側元素開始,與其他元素比較,產生一個初步的排序子集,每當下一個比較的元素小於排序子集的最右元素時,通過與子集元素比較,將其插入到子集的順序位置。子集不斷向右與剩餘元素進行比較,直至完成排序。
-
- 順序排序——冒泡排序,將列表中的元素,從左端開始,兩個元素比較大小,若左大右小,兩個交換位置,一直往復,將最大元素置於最右位置。每次排序都將當前最大的交換到最右
- 快速排序,使用遞歸的思想。以一個元素爲界限,小在左,大在右。而後在進行遞歸,左右繼續剛纔的流程。直到完成排序。其思想與查找中的二分法相似,每次分爲兩部分,進行排序。從而提升效率。
教材學習中的問題和解決過程
- 問題1:<T extends Comparable<? super T>>
解答:
首先,
表示泛型參數應用於該方法,可是,泛型方法並不意味着返回一個泛型數據,而是通過編譯器判斷後,返回一個具體的數據類型的數據。結合起來,總體意識就爲,該方法適用於繼承了Comparable藉口的T方法,其中該參數繼承了泛型類型,但其具體數據類型不明。
html
- 問題2:類的派生表明什麼關係?
問題2解決方案:繼承是從已有的類中派生出新的類,新的類能吸取已有類的數據屬性和行爲,並能擴展新的能力,是使用已存在的類的定義做爲基礎創建新類的技術,新類的定義能夠增長新的數據或新的功能,也能夠用父類的功能,但不能選擇性地繼承父類。git
代碼調試中的問題和解決過程
- 問題一:構建getRight()方法
- 問題一解決方法:在BTNode裏面就提供了getRight()方法,在這裏只須要判斷root是否爲空就能夠了
public LinkedBinaryTree
getRight() {
算法
if (root == null)
return null;
else {
LinkedBinaryTree<T> result = new LinkedBinaryTree<T>();
result.root = root.getRight();
return result;
}
}
- 問題二:類型不能轉換
問題二解決方法:public LinkedBinaryTree
getRight() {
數組
if (root == null)
return null;
else {
LinkedBinaryTree<T> result = new LinkedBinaryTree<T>();
result.root = root.getRight();
return result;
}
}數據結構
- 問題3:如何解決空間不足的問題
問題3解決方案:能夠直接引用ArrayList中的expandCapacity()函數
private void expandCapacity() {學習
T[] larger = (T[]) (new Object[tree.length * 2]);
for (int index = 0; index < tree.length; index++)
larger[index] = tree[index];
tree = larger;
}
(statistics.sh腳本的運行結果截圖)設計
上週考試錯題總結
未考試調試
結對及互評
評分標準
- 正確使用Markdown語法(加1分):
- 不使用Markdown不加分
- 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
- 模板中的要素齊全(加1分)
- 缺乏「教材學習中的問題和解決過程」的不加分
- 缺乏「代碼調試中的問題和解決過程」的不加分
- 代碼託管不能打開的不加分
- 缺乏「結對及互評」的不能打開的不加分
- 缺乏「上週考試錯題總結」的不能加分
- 缺乏「進度條」的不能加分
- 缺乏「參考資料」的不能加分
教材學習中的問題和解決過程, 一個問題加1分code
代碼調試中的問題和解決過程, 一個問題加1分
- 本週有效代碼超過300分行的(加2分)
- 其餘加分:
- 週五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 課後選擇題有驗證的加1分
- 代碼Commit Message規範的加1分
- 錯題學習深刻的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習狀況真實可信的加1分
- 扣分:
- 有抄襲的扣至0分
- 代碼做弊的扣至0分
- 遲交做業的扣至0分
點評模板:
點評過的同窗博客和代碼
其餘(感悟、思考等,可選)
- 每節課的考試讓我十分吃不消,不僅是英語單方面的問題,Java也有許多問題亟待解決,由於課本版本不一樣,找起知識點來比較麻煩。
- 好多同窗好牛,本身好菜,各類把打好的代碼推翻重來,參考別人代碼改來改去把本身的程序變成了四不像,運行不了,本週更加熟悉了運行一個目的堆了四五個程序的Java常態,繼續虛心學習吧。
- 實驗做業愈來愈難,我愈來愈菜,隨時gg。
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
200/200 |
2/2 |
20/20 |
|
第二週 |
350/500 |
2/4 |
24/38 |
|
第三週 |
512/1000 |
3/7 |
22/60 |
|
|
第四周 |
1158/1300 |
4/9 |
35/90 |
|
|
第五週 |
2905/3000 |
6/5 |
24/24 |
|
|
第六週 |
3927/4000 |
2/2 |
26/30 |
|
|
第七週 |
9041/6000 |
3/4 |
30/50 |
參考資料