20172328 2018—2019《Java軟件結構與數據結構》第二週學習總結
概述 Generalization
本週學習了第三章集合概述——棧和第四章鏈式結構——棧。主要討論了集合以及用於實現集合的基本數據結構,以及集合設計的相關問題和目標。本章內容以棧爲例展現與集合的設計、實現和使用等有關的問題。html
教材學習內容總結 A summary of textbook
教材學習中的問題和解決過程 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