20172320 2017-2018-2 《Java程序設計》第十周學習總結
20172320 2017-2018-2 《Java程序設計》第十周學習總結
教材學習內容總結
1、集合是一種對象,類似於保存其他對象的存儲庫
- 集合的同構意味著這種集合保存類型全部相同的對象;異構意味著可以保存各種類型的對象
2、抽象數據類型(ADT)是由數據和在該數據上所實施的具體操作構成的集合。
- ADT有名稱、值域和一組允許執行的操作
- ADT上可以執行的操作與底層的實現分離開了
3、一個動態數據結構用鏈來實現,動態數據結構的大小規模隨需要增長和收縮
4、線性數據結構
- 隊列:類似於列表,隊列的元素存取方式有限,是一種以先進先出方式管理數據的線性數據結構
- 堆棧:一種以後進先出方式管理數據的線性數據結構
5、非線性數據結構
- 樹:樹是一個非線性數據結構,由一個根節點和構成層次結構的多個節點組成。除根節點外的所有節點稱為內部節點,沒有子節點的節點稱為葉節點。根節點在頂層,葉節點在底層。二叉樹和樹的操作有所不同
- 圖:沒有類似於樹根節點那樣的初始入口點。一個節點到另一個節點的連接稱為邊,連接一個圖內各節點的邊數一般沒有限制
6、Java集合類API:定義了幾種表示不同類型集合的類
- 泛型:Java集合類ARI中的類定義為泛型,指一個集合所管理的對象的類型要在實例化該集合對象時才確定,泛型保證了集合中對象類型的兼容性
教材中遇到的問題和解決過程‘
- 問題1:隊列和堆棧?
- 問題1解決方案:
- 隊列:隊列(Queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表
(1)允許刪除的一端稱為隊頭
(2)允許插入的一端稱為隊尾
(3)當隊列中沒有元素時稱為空隊列
- 堆棧:限制僅在表的一端進行插入和刪除運算的線性表
(1)通常稱插入、刪除的這一端為棧頂(Top),另一端稱為棧底(Bottom)。
(2)當表中沒有元素時稱為空棧 作用:堆棧:1.用於符號匹配
2.用於計算代數式
3.構造表達式
4.用於函數調用
(2、3可以用二叉樹來解決)- 相同點:1.都是線性結構。
2.插入操作都是限定在表尾進行。
3.都可以通過順序結構和鏈式結構實現。
4.插入與刪除的時間復雜度都是O(1),在空間復雜度上兩者也一樣。
5.多鏈棧和多鏈隊列的管理模式可以相同。 不同點:1.刪除數據元素的位置不同,棧的刪除操作在表尾進行,隊列的刪除操作在表頭進行。
2.應用場景不同;常見棧的應用場景包括括號問題的求解,表達式的轉換和求值,函數調用和遞歸實現,深度優先搜索遍歷等;常見的隊列的應用場景包括計算機系統中各種資源的管理,消息緩沖器的管理和廣度優先搜索遍歷等。
3.順序棧能夠實現多棧空間共享,而順序隊列不能。- 問題2:泛型的理解
問題2解決方案:
本質:為了參數化類型(在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型)。也就是說在泛型使用過程中,操作的數據類型被指定為一個參數,這種參數類型可以用在類、接口和方法中
例子:見參考鏈接
特性:泛型只在編譯階段有效
使用:- 泛型類:用於類的定義中,通過泛型可以完成對一組類的操作對外開放相同的接口
- 泛型接口:與泛型類的定義及使用基本相同,泛型接口常被用在各種類的生產器中
- 泛型方式
優點:- 把運行時期的問題提前到了編譯期間
- 避免了強制類型轉換
- 優化了程序設計,解決了黃色警告線問題,讓程序更安全
代碼調試中的問題和解決過程
上周考試錯題總結
What does the following method compute? Assume the method is called initially with i = 0
public int question9(String a, char b, int i)
{
if (i = = a.length( )) return 0;
else if (b = = a.charAt(i)) return question9(a, b, i+1) + 1;
else return question9(a, b, i+1);
}
A .the length of String a
B .the length of String a concatenated with char b
C .the number of times char b appears in String a
D .returns 1 if char b appears in String a at least once, and 0 otherwise
E .the char which appears at location i in String a
分析:該方法將字符串a中的每個字符與char b進行比較,直到i到達字符串a的長度。1被添加到每個匹配的返回值中。A recursive algorithm is superior to an iterative algorithm along which of the following criteria?
A .The recursive algorithm is easier to debug
B .The recursive algorithm is computationally more efficient
C .The recursive algorithm is more elegant
D .The recursive algorithm requires less memory to execute
E .all of the above
分析:為了簡單起見,數學通常遞歸地定義函數The difference between direct and indirect recursion is
A .direct recursion occurs when a method invokes itself; indirect recursion occurs when there is an intervening method
B .indirect recursion occurs when a method invokes itself; direct recursion occurs when there is an intervening method
C .direct recursion only occurs with methods declared to be private; indirect recursion can occur with methods declared to be private, protected, or public
D .indirect recursion only occurs with methods declared to be private; direct recursion can occur with methods declared to be private, protected, or public
E .none of the above
分析:直接遞歸意味著方法直接調用自己,而不使用中介方法。當再次調用原始方法之前有一個或多個中介方法時,就會發生間接遞歸。結對及互評
點評過的同學博客和代碼
- 本周結對學習情況
20172327
20172317 - 結對學習內容
?教材第11,12章
?閱讀11.1-11.6、12.1-12.3章節
?完成課後自測題,並參考答案學習
?完成課後練習題
?完成程序設計項目:至少完成PP11.1、PP11.2、PP12.1、PP12.9
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 67/67 | 1/4 | 20/20 | |
第二周 | 328/395 | 1/5 | 20/40 | |
第三周 | 523/851 | 1/6 | 20/60 | |
第四周 | 1070/1921 | 1/7 | 20/80 | |
第五周 | 608/2529 | 1/8 | 10/90 | |
第六周 | 608/2899 | 1/9 | 20/110 | |
第七周 | 429/3328 | 1/10 | 20/130 | |
第八周 | 804/4131 | 1/11 | 20/150 | |
第九周 | 521/4652 | 1/12 | 20/170 | |
第十周 | 600/5252 | 1/13 | 20/190 |
參考資料
- 《Java程序設計與數據結構教程(第八版)》
- 藍墨雲班課
- 隊列和堆棧的區別
- 棧與隊列的異同
- java 泛型詳解
20172320 2017-2018-2 《Java程序設計》第十周學習總結