20172313 2018-2019-1 《程序設計與數據結構》第二週學習總結
教材學習內容總結
- 集合
- 集合是一種彙集、組織了其餘對象的對象。
- 集合中的元素一般是按照它們添加到集合的順序,或者是按元素之間的某種內在關係來組織的。(線性集合和非線性集合)
- 集合是一種隱藏了實現細節的抽象。(集合也是一種抽象,集合定義了一些接口操做,用戶經過這些操做能夠管理集合中的對象。
- 數據類型是一組值及做用與這些數值上的各類操做。
- 抽象數據類型是一種用於實現集合的編程結構集。
- 數據結構是一種用於實現集合的基本編程結構。
- 棧集合
- 棧的元素是按按後進先出(LIFO)的方法進行處理的,最後進入棧中的元素最早被移出。
- 編程人員選擇的數據結構,應與須要進行數據管理的類型相適應。
- 在棧的設計中,能夠看到棧的做用與使用棧的應用程序之間的分離。注意:若是pop或peek操做能夠做用於空棧,那麼棧的任何實現都要能拋出一個異常。集合的做用不是去肯定如何處理這樣一個異常,而只是把它報告給使用該棧的應用程序。一樣,在棧中不存在滿棧的概念。所以,應該由棧來管理他本身的儲存空間,消除發生滿棧的可能。
- 主要的面向對象概念
- 多態應用是一個引用變量,它能夠在不一樣地點應用不一樣類型的對象。繼承可用於建立一個類層次,其中,一個引用變量可用於指向與之相關的任意對象。
- 泛型:能夠定義一個類,以便它能存儲、操做和管理在實例化以前沒有指定是何種類型的對象。
class Box<T>{
//用於管理類型T的對象的聲明或代碼
}
Box<Widget> box1 = new Box<Widget>
Box<Gadget> box2 = new Box<Widget>
- 異常
- 異常就是一個對象,它定義了一種非正常或錯誤的狀況。異常由程序或運行時環境拋出,能夠按預期的被捕獲或被正確處理。錯誤與異常相似,只不過錯誤每每表示一種沒法恢復的狀況,且沒必要去捕獲它。
- 錯誤和異常表示不正常或不合法的處理。
- 棧ADT
- Java接口定義了一個抽象方法集,有助於把抽象數據類型的概念與其實現分隔開來。
- 經過使用接口名做爲返回類型,方法就不會侷限於實現棧的任何特定類。
public interface StackADT<T> {
public void push (T element);
public T pop();
public T peek();
public boolean isEmpty();
public int size();
public String toString();
}
- 連接做爲引用
- 對象引用變量能夠用來建立鏈式結構。
- 鏈表有一些對象構成,其中每一個對象指向了鏈表中的下一對象。
- 鏈表會按需動態增加,所以在本質上,它沒有容量限制。
- 管理鏈表
- 從列表中插入和刪除元素時有兩種狀況:一種是處理第一個結點的狀況,另外一種時處理其它結點的狀況。經過在列表的前端引入哨兵節點或啞節點,就能夠去除這種涉及第一個結點的狀況。哨兵結點能夠做爲一個假的第一個結點,並無真正表示列表中的某個元素。當使用了哨兵結點時,全部的插入和刪除操做就都屬於第二種狀況了。
教材學習中的問題和解決過程
- 問題1:繼承和接口的區別,上學期學習的時候查過這個問題,答案有些淡忘了,如今再碼一遍以便於之後的複習。
- 問題1解決方案:1、語法層次:抽象類:1.由abstract關鍵詞修飾的類稱之爲抽象類。
2.抽象類中沒有實現的方法稱之爲抽象方法,也須要加關鍵字abstract。
3.抽象類中也能夠沒有抽象方法,好比HttpServlet方法。
4.抽象類中能夠有已經實現的方法,能夠定義成員變量。
接口:1.由interface關鍵詞修飾的稱之爲接口;
2.接口中能夠定義成員變量,可是這些成員變量默認都是public static final的常量。
3.接口中沒有已經實現的方法,所有是抽象方法。
4.一個類實現某一接口,必須實現接口中定義的全部方法。
5.一個類能夠實現多個接口。2、設計層次:詳見博客最後連接。
- 問題2:泛型的做用是什麼?
- 問題2解決方案:從Java5.0開始,容許用戶基於泛型來定義一個類。也就是說,咱們能夠定義一個類,它存儲,操做和管理的對象的數據類型直到改類實例化時才被指定。這使得結構的建立不只能夠操做「泛型」元素,並且還能夠提供類型檢查。
- 問題3:使用數組和鏈表均可以實現棧,那麼二者的優缺點是什麼?
- 問題3解決方案:只要在須要時,鏈表實現纔會分配儲存空間,而且只有硬件空間大小的理論限制。數組實現爲每一個對象使用的空間更少,由於他只須要儲存對象,不須要儲存額外的指針。可是,在初始的時候,數組會分配比它所需的更多空間。
代碼調試中的問題和解決過程
問題1:在使用數組進行堆棧的時候,進行測試時老是得不到正確的結果。會把我push的數字屢次輸出,沒法獲得正確的結果。
html
問題1解決方案:在debug了以後,發現是我「result」的變量是在方法外定義的,而不是方法內,這就致使「result」的值沒法初始化爲零,輸出的時候看起來就會像是屢次輸出。
![](http://static.javashuo.com/static/loading.gif)
前端
問題2:在進行編程項目4_2的時候,輸出時沒法獲得正確的數字。
git
問題2解決方案:在進行toString的時候,沒有額外定義一個變量使它等於count,而是直接使用count進行自減,致使count的量出現變化,沒法正確的進行輸出。編程
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
上週考試錯題總結
- 錯題1:The analysis of nested loops must take into account both the inner and outer loops.
A . True
B . Flase
- 解析:分析嵌套循環的複雜度是,必須將內層循環和外層循環都考慮進來。
- 錯因:這題徹底是不該該錯的,徹底是因爲本身粗枝大葉,對英語沒有理解清楚就選了答案。
結對及互評
- 博客中值得學習的或問題:
- 代碼中值得學習的或問題:
點評過的同窗博客和代碼
其餘(感悟、思考等,可選)
這是開學的第二個星期了,狀態相比第一個星期有所回升,但仍是不盡人意,在學習的時候注意力仍然不夠集中,容易分散。在暑假裏丟掉的東西感受尚未徹底撿起來,在這周寫代碼的時候,也常常會犯一些低級的錯誤,常常會出現變量定義位置錯誤的狀況,在這上面也浪費了不少時間。但願能在接下來的學習時間中狀態能穩步提升,自身能不斷進步!數組
學習進度條
第一週 |
200/200 |
1/1 |
5/20 |
|
第二週 |
981/1181 |
1/2 |
15/20 |
|
計劃學習時間:15小時數據結構
實際學習時間:15小時oop
參考資料