20172318 2017-2018-2 《程序設計與數據結構》第10周學習總結
教材學習內容總結
- 集合是一種對象,相似於保存其餘對象的存儲庫。
- 集合的同構和異構:同構:集合中保存類型所有相同的對象。異構:集合中能夠保存各類類型的對象。
- 一個抽象數據類型(ADT)是由數據和在該數據上所實施的具體操做構成的集合。一個ADT有名稱、
值域和一組容許執行的操做。ADT如何保存數據和執行方法的細節與其概念分離開了。實質上,「集合」和抽象數據類型」是能夠互換的等同概念。
- 對象具備定義良好的接口,從而成爲一種實現集合的完善機制
- 動態數據結構的大小規模隨須要增加和收縮。
- 經過保存和更新對象引用來實現一個鏈表的管理。
- 其餘的動態列表1.雙向鏈表2.頭節點
- 線性數據結構
- 隊列:隊列是一種以先進先出方式管理數據的線性數據結構。
- 堆棧:堆棧是一種之後進先出方式管理數據的線性數據結構。
- 非線性數據結構
- 樹:樹是一個非線性數據結構,由一個根節點和構成層次結構的多個節點組成。除根節點外的全部節點稱爲內部節點,沒有子節點的節點稱爲葉節點。
- 圖:圖是 非線性數據結構,是用常見的邊來鏈接節點。
- Java集合類API中的類定義爲泛型,是指一個集合所管理的對象的類型要在實例化該集合的對象時才肯定。泛型保證了集合中對象類型的兼容性。
教材學習中的問題和解決過程
- 問題1:頭結點的做用
- 問題1解決方案:方便在第1個位置進行插入、刪除操做時同其餘位置同樣。加了頭結點以後,插入、刪除都是在後繼指針next上進行操做,不用動頭指針;若不加頭指針的話,在第1個位置插入或者刪除第1個元素時,須要動的是頭指針。例如:在進行刪除操做時,L爲頭指針,p指針指向被刪結點,q指針指向被刪結點的前驅,對於非空的單鏈表:
1.帶頭結點時
刪除第1個結點(q指向的是頭結點):q->next=p->next; free(p);
刪除第i個結點(i不等於1):q->next=p->next;free(p);
2.不帶頭結點時
刪除第1個結點時(q爲空):L=p->next; free(p);
刪除第i個結點(i不等於1):q->next=p->next;free(p);
結論:帶頭結點時,不論刪除哪一個位置上的結點,用到的代碼都同樣;不帶頭結點時,刪除第1個元素和刪除其它位置上的元素用到的代碼不一樣,相對比較麻煩。
- 問題2:API是什麼?
- 問題2解決方案:百科上說:API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼,或理解內部工做機制的細節。
好吧看了仍是不怎麼明白,因而上知乎找了個通俗易懂的答案
就像咱們已經知道ArrayList的使用卻不清楚它的源碼同樣html
代碼調試中的問題和解決過程
- 問題1:pp13.3如何對鏈表進行排序?
- 問題1解決方案:這時想起了以前學過的selectionSort類,而以前的類是須要compareble的列表,因而我改爲了
public void selectionSort(int[] list) {
for (int index = 1; index < list.length; index++) {
int key = list[index];
int position = index;
while (position > 0 && key<(list[position - 1])) {
list[position] = list[position - 1];
position--;
}
list[position] = key;
}
}
而後再把鏈表放進int數組,代入方法進行排序git
上週考試錯題總結
- 錯題1及緣由,理解狀況
An infinite loop and an infinite recursion
A . are different because it is impossible to detect the latter, while it's quite easy to detect the former
B . both continue to repeat indefinitely
C . both will be caught by the compiler
D . both will be caught by the Java Virtual Machine during execution
E . none of the above
選B,無限循環和遞歸都是類似的,它們會不斷地重複。二者都不能被編譯器捕獲或在運行時捕獲
- 錯題2及緣由,理解狀況
It always is possible to replace a recursion by an iteration and vice versa.
A . trueB . false
選A,遞歸和迭代都是重複的形式,它們在計算方面是等價的——每一個均可以被另外一個取代。
- 錯題3及緣由,理解狀況
The following method correctly adds two ints, returning their sum:
public int add(int a, int b)
{
return (b > 0) ? add(a+1, b-1) : a;
}
A . true
B . false
選B,b<0時運算會失敗
點評過的同窗博客和代碼
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
128/128 |
1/1 |
12/12 |
|
第二週 |
212/340 |
1/2 |
18/30 |
|
第三週 |
206/546 |
1/3 |
20/50 |
|
第四周 |
483/1029 |
2/5 |
40/90 |
|
第五週 |
633/1662 |
1/6 |
30/120 |
|
第六週 |
560/2222 |
1/7 |
20/140 |
|
第七週 |
511/2733 |
1/8 |
20/160 |
|
第八週 |
817/3550 |
3/11 |
25/185 |
|
第九周 |
1319/4869 |
2/11 |
20/205 |
|
第十週 |
488/5357 |
1/11 |
20/225 |
|
參考資料