20172328 2018—2019《Java軟件結構與數據結構》第二週學習總結

20172328 2018—2019《Java軟件結構與數據結構》第二週學習總結

概述 Generalization

本週學習了第三章集合概述——棧和第四章鏈式結構——棧。主要討論了集合以及用於實現集合的基本數據結構,以及集合設計的相關問題和目標。本章內容以棧爲例展現與集合的設計、實現和使用等有關的問題。html

教材學習內容總結 A summary of textbook

  • 3.1集合
  • 集合是一種彙集、組織了其餘對象的對象。集合能夠分爲兩大類:線性集合和非線性集合。
  • 線性集合:一種其元素按照直線方式組織的集合。
  • 非線性集合:一種其元素按某種非直線方式組織的集合。
  • 集合中元素的彼此之間的組織形式一般由元素添加到集合的次序元素自身的一些內在關係決定。
  • 抽象數據類型(ADT):是一種在程序設計語言中還沒有定義其值和操做的數據結構類型。ADT的抽象性體如今,ADT必須對實現細節進行定義,且這些對用戶是不可見的。
  • Java集合API(應用程序編程接口):一個類集,表示了一些特定類型的集合,這些類的實現方式各不相同。
  • 3.2棧集合
  • 棧(STACK)是一種線性集合,其元素的添加和刪除都是在同一端進行的。其遵循後進先出(LIFO)原則,可顛倒順序。
  • 棧的基本操做
    java

  • 3.3主要的面向對象概念
  • 利用多態引用和繼承,能夠建立能夠儲存任意類型的對象的集合。
  • 多態引用是一個引用變量,他能夠在不一樣地點引用不一樣類型的對象。術語「多態性」可定義爲「具備多種形式」。經過多態引用調用的某個方法,在每次調用的時候均可以發生變化。
  • 繼承可用於建立一個類層次,一個引用變量可用於指向與之相關的任意對象。繼承就是從已有類派生出一個新類的過程。新類自動地含有初始類的部分和所有變量和方法。
  • 泛型提供了編譯時類型安全檢測機制,該機制容許程序員在編譯時檢測到非法的類型。泛型的本質是參數化類型,也就是說所操做的數據類型被指定爲一個參數。
  • 3.4使用棧計算後綴表達式
  • 由棧提供的操做與後綴表達式計算過程有着很好的一致性。使用棧來計算後綴表達式的算法描述以下:從左到右掃描表達式,依次識別出每一個符號(操做符或操做數)。若是是操做數,就將其壓入(push)棧中。如果操做符,則從棧中彈出(pop)兩個操做數,並把先彈出數放在符號右側,後彈出數放在符號左側進行計算,而後把計算結果壓入(push)到棧中,循環往復,當進行到表達式的末尾時,棧中所剩餘的元素即是該表達式的結果。
  • javadoc註釋(爲Java添加註釋的官方標準):以/**開始、以 */結束。Javadoc可用於建立關於類集的在線的HTML文檔,在線的JavaAPI文檔就是例子。
  • 3.5異常(略)
  • 3.6棧ADT
  • Java接口定義了一個抽象方法集,有助於把抽象數據類型的概念與其實現分開。
    public interface stackADT <T>
  • 3.7用數組實現棧
  • 數組中的單元數量稱爲容量,該值儲存在數組的length常量中,數組一旦建立好,其容量是不能改變的。
  • 3.8ArrayStack類
  • 泛型(包括泛型數組)不能被實例化。因此咱們必須建立一個存儲Object引用的數組,而後把他轉換成泛型數組。
  • 建立一個泛型數組:
    stack = (T[])(new Object[initialCapiry])
  • 在將Object數組轉換成泛型數組時必定會出現未檢驗類型轉換警告,因此加上@SuppressWarnings(「unchecked」)便可。
  • push、pop、peek、isEmpty、size等方法的具體使用。(做業實踐中有,此處再也不詳細敘述)
  • 4.1連接做爲引用
  • 對象引用變量能夠用來建立鏈式結構。鏈式結構是一種數據結構,主要使用對象引用變量來建立對象之間的連接。介紹了自引用,在鏈表中存儲的對象一般稱爲該鏈表的結點。
    android

  • 4.2管理鏈表
  • 訪問鏈表元素的惟一方式是,從第一個元素開始,順着鏈表往下進行。
  • 使用鏈表時,咱們要維護指向鏈表第一個元素的指針。
  • 插入結點和刪除結點須要注意不能丟失數據,有時須要建立一個結點來暫時保存一下。
  • 使用鏈表結構能夠克服數組鏈表須要預先知道數據大小的缺點,鏈表結構能夠充分利用計算機內存空間,實現靈活的內存動態管理。可是鏈表失去了數組隨機讀取的優勢,同時鏈表因爲增長告終點的指針域,空間開銷比較大。

  • 4.3無連接的元素
  • 雙向鏈表也叫雙鏈表,是鏈表的一種,它的每一個數據結點中都有兩個指針,分別指向直接向後和直接向前。因此,從雙向鏈表中的任意一個結點開始,均可以很方便地訪問它的頭結點和尾結點。

    git

  • 4.4JavaAPI中的棧
  • java.util.Stack類是從Vector派生而來的,它帶給了棧一些不恰當的操做。
  • 4.5使用棧來穿越迷宮
  • 可使用棧來模擬遞歸處理,以跟蹤恰當的數據。
  • 4.6用鏈表來實現棧
  • 主要是經過代碼體現。程序員

教材學習中的問題和解決過程 Problem and countermeasure

  • 1.不明白泛型是什麼且如何使用。
  • 問題1的解答:
  • 假定咱們有這樣一個需求:寫一個排序方法,可以對整型數組、字符串數組甚至其餘任何類型的數組進行排序,該如何實現?算法

  • 答案是可使用 Java 泛型。使用 Java泛型的概念,咱們能夠寫一個泛型方法來對一個對象數組排序。而後,調用該泛型方法來對整型數組、浮點數數組、字符串數組等進行排序。編程

  • 定義泛型方法的規則:
    • 全部泛型方法聲明都有一個類型參數聲明部分(由尖括號分隔),該類型參數聲明部分在方法返回類型以前(在下面例子中的 )。
    • 每個類型參數聲明部分包含一個或多個類型參數,參數間用逗號隔開。一個泛型參數,也被稱爲一個類型變量,是用於指定一個泛型類型名稱的標識符。
    • 類型參數能被用來聲明返回值類型,而且能做爲泛型方法獲得的實際參數類型的佔位符。
    • 泛型方法體的聲明和其餘方法同樣。注意類型參數只能表明引用型類型,不能是原始類型(像int,double,char等).

課後習題代碼實踐遇到的問題和解決 Exercise

  • 問題1:理解pp3.2和pp3.8的不一樣。剛開始的時候我在作兩個題目的時候以爲很類似。因此在成功吧pp3.2作出來後就將兩個入棧出棧循環複製到了pp3.8中,當時試驗的例子是中文「我想你」,出來的是「你想我」,因此就很放心的交了做業。直到上自習的時候聽到同窗們討論,我才意識到pp3.8是元素集的相反,雖然在中文單獨的字上體現不出來,可是在英文表述上就頗有問題。
  • 問題1解決:我將pp3.8的charAt方法換成split方法,用空格把語句分開,而後再循環入棧、循環出棧。這樣就能夠達到「I love Java」變成「Java love I」!可是,個人中文如果不帶空格,就會直接被當作一個元素集,而後紋絲不動的拋回給我。因此我就想用條件語句作兩段語句,先用if語句看看語句索引第二位置是不是空格,而後決定用哪一種方法。(具體實現代碼可去碼雲查看。)
    api

  • 問題2:不明白選擇排序、冒泡排序、插入排序到底分別指什麼?雖然上學期學過了,但印象只有方法的實際實現、卻沒有對應上相應的名字。因此在作藍墨雲班課上的訓練時顯得很生疏。
  • 問題2解決:
  • 冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。而後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(由於可能因爲第2個數和第3個數的交換,使得第1個數再也不小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已是最大的),第二趟結束,在倒數第二的位置上獲得一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。
  • 選擇排序(Select Sorting):的基本思想是:第一次從R[0]~R[n-1]中選取最小值,與R[0]交換,第二次從R{1}~R[n-1]中選取最小值,與R[1]交換,...., 第i次從R[i-1]~R[n-1]中選取最小值,與R[i-1]交換,.....,第n-1次從R[n-2]~R[n-1]中選取最小值,與R[n-2]交換,總共經過n-1次,獲得一個按排序碼從小到大排列的有序序列.
  • 插入排序(Insertion Sorting):局部有序,先把第一個數據當作一個有序數組,而後把第二個數據插入到這個「有序數組」中,造成具備兩個數據的有序數組,依次類推,直至最後一個數據插入到具備 N-1 個數據的有序數組中,完成排序。插入過程:獲取當前數據,並標記當前數據與下標,與以前有序數據的最後一個做比較,若小於最後一個數據則將最後一個數據進行後移操做,而後再與倒數第二個數據進行比較,重複剛纔的操做,若不小於則終止操做。
  • 三種排序的比較:其時間複雜度都是O(n^2),可是因爲細節比較或是循環問題,速度上體現爲:插入排序>選擇排序>冒泡排序。
  • 在瞭解了這三種排序以後開始作藍墨雲上的做業。要對鏈表進行排序仍是很考驗思惟邏輯的。
  • 首先說給鏈表冒泡排序。冒泡排序的思惟是最簡單的,可是代碼實現起來也非手到擒來。當時用循環來比較的時候,就一直要把鏈表的節點向後推,但要用一箇中間變量temp來保存前面的數字,而後作數字交換,最後把遍歷的起始節點重指向頭結點。
  • 其次是給鏈表選擇排序。選擇排序須要的變量更加多,由於要遍歷n-1次,且每次都要挑出最小的數字來和當前參與比較的第一個數字調換位置。因此要設兩個整型變量min和temp和三個結點來指向位置。數組

碼雲連接

本週安卓做業pp3.9安全

代碼量

上週測試活動錯題改正 Correction

  • 1.Software that is easily portable, can be moved from one computing environment to another with little or no effort.
    A .True
    B .Flase
  • 改正:當時理解的題目意思是:軟件很好移植!!當時以爲使用Java語言才能夠很好移植。結果今天再看題目,人家的意思是:可移植性好的軟件,能夠絕不費力或費力不多的從一個計算機上移植到另外一個計算機上。對不起大哭,英語沒學好。
  • 2.An efficient system handles problems gracefully
    A .True
    B .Flase
  • 改正:高效的系統處理軟件會很優雅。暫時不知道到底該選擇什麼。暫且認爲:效率代表軟件實現其目標而無浪費資源,因此很利索?!
  • 3.Software systems need only to work to support the work of developers, maintainers, and users.
    A .True
    B .Flase
  • 改正:本題是不全面的說法,軟件系統須要儘可能的完美符合全部人的需求。
  • 4.Which Growth function has the highest order?
    A .O(n log n)
    B .O(n^2)
    C .O(2^n)
    D .O(log n)
  • 改正:好的,是它的題目沒有弄清楚,我幫它補上去了,2n和2^n是有很大差異的。速率大小排序是:
    n^3>2^n>n^2>nlogn>logn>n
  • 5.Which of the following has the smallest time complexity?
    A .3n+5+2n
    B .logn+2
    C .3n+4
    D .nlogn
  • 改正:看錯了,人家問的是最慢的。
  • 6.If the algorithm is inefficient, a faster processor will help.
    A .True
    B .Flase
  • 改正:有幫助,可是幫助很小,因此關鍵仍是在於算法的複雜度(運行速率),尤爲是在要處理的問題巨大的時候,使用更快的處理器也無濟於事。

結對及互評Group Estimate

-20172301
-20172304

點評模板:

  • 博客中值得學習的或問題:
    • 20172301:教材問題和實踐問題很詳細,教材內容總結簡明扼要,博客風格較上學期有所改變。雖然我知道你最近超級忙,就如同我上學期那樣,可是對你學的最好的一門課(大概是你最喜歡的?)仍是多賜予點精力吧!
    • 20172304:這學期的博客真的很讓我開心,真的和之前有了很大區別。雖然我很早很早以前就知道個人小夥伴很聰明,可是在學習態度上真的是由之前的率性而爲變得認真負責,很開心能在Java學習的道路上一同成長,繼續加油!
  • 第二週結對任務落實的不太到位,不少問題都是咱們三個本身解決本身的,多是有點忙啦(#^.^#)。不過不過我相信,下一週咱們三個必定會繼續獨立思考、但在問題上共同攻難克險!

其餘(感悟、思考等,可選)Else

一個假期沒翻書的結果就是讓我如今得多翻書

不少時候面臨問題我老是倒在畏懼腳下,「我不會」、「我不能」、仍是「我不行」,其實都是懦弱兩手一攤不做爲的我。匆匆從指縫溜走的都是最珍貴的年輕生命。既然十九年又開始新的輪迴,那就勇敢一點、再勇敢一點吧!

  • 若是一生沒有茶不思,飯不想的想要一件東西,自己就是一件很遺憾的事。人生可貴本就是癡迷。 dust yourself off

學習進度條Learning List

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 621/621 1/2 14/22

參考資料Reference

相關文章
相關標籤/搜索