20182327 2019-2020-1 《數據結構與面向對象程序設計》第七週學習總結

20182327 2019-2020-1 《數據結構與面向對象程序設計》第七週學習總結

教材學習內容總結

  • 一、算法、棧、隊列
  • 二、算法優略可由增加函數斷定。
  • 三、分爲時間和空間,時間只看最大位。
  • 四、後綴表達式:有數字和符號計算。遇到數字將其放入棧頂。遇到符號就將棧頂- 五、兩個數用符號操做。棧頂爲被操做數。
  • 六、棧的類型不定能夠用泛型,即不肯定類型,到實例化時再肯定類型。
  • 七、棧是能夠經過集合實現的,top在初始化是爲0,以後會變成棧頂的+1.
  • 八、ADT接口,能夠經過接口來實現棧。
  • 九、棧有異常:1.入棧容量不夠 2.出棧時棧空 3.掃描完棧中值多於1
  • 十、pop,peek,push等方法編寫類
  • 十一、隊列與棧核心思想相似,是先進先出
  • 十二、 查找算法的總結
    - 線性查找,經過依次遍歷所要查找元素的集合,比較是否存在所需查找的元素,直到找到該元素或返回false代表集合不存在該元素。實現較爲簡單,==但當集合元素數量巨大時,效率極慢==。
    -
    - 二分法查找,經過每次將集合分爲兩部分,比較所需查找的元素位於中間元素的左半區仍是右半區,依次進行二分,直至找到元素,或返回false。效率較高,例如,一個含義一百萬元素的集合,只需20次左右便可完成查找。==但二分法的實現須要基於一個有序數組,不然沒法實現。==
  • 1三、排序算法的總結
    - 順序排序——選擇排序法,選擇排序法每遍歷列表依次,找到當前最小元素,將其與列表左側元素交換,最終將全部元素進行排序。
    -
    - 順序排序——插入排序法,從最左側元素開始,與其他元素比較,產生一個初步的排序子集,每當下一個比較的元素小於排序子集的最右元素時,通過與子集元素比較,將其插入到子集的順序位置。子集不斷向右與剩餘元素進行比較,直至完成排序。
    -
    - 順序排序——冒泡排序,將列表中的元素,從左端開始,兩個元素比較大小,若左大右小,兩個交換位置,一直往復,將最大元素置於最右位置。每次排序都將當前最大的交換到最右
    - 快速排序,使用遞歸的思想。以一個元素爲界限,小在左,大在右。而後在進行遞歸,左右繼續剛纔的流程。直到完成排序。其思想與查找中的二分法相似,每次分爲兩部分,進行排序。從而提升效率。

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

  • 問題1:<T extends Comparable<? super T>>
  • 解答:
    首先, 表示泛型參數應用於該方法,可是,泛型方法並不意味着返回一個泛型數據,而是通過編譯器判斷後,返回一個具體的數據類型的數據。結合起來,總體意識就爲,該方法適用於繼承了Comparable藉口的T方法,其中該參數繼承了泛型類型,但其具體數據類型不明。 html

  • 問題2:類的派生表明什麼關係?
  • 問題2解決方案:繼承是從已有的類中派生出新的類,新的類能吸取已有類的數據屬性和行爲,並能擴展新的能力,是使用已存在的類的定義做爲基礎創建新類的技術,新類的定義能夠增長新的數據或新的功能,也能夠用父類的功能,但不能選擇性地繼承父類。git

代碼調試中的問題和解決過程

  • 問題一:構建getRight()方法
  • 問題一解決方法:在BTNode裏面就提供了getRight()方法,在這裏只須要判斷root是否爲空就能夠了

public LinkedBinaryTree getRight() { 算法

if (root == null)

        return null;

    else {

        LinkedBinaryTree<T> result = new LinkedBinaryTree<T>();

        result.root = root.getRight();

        return result;

    }

}
  • 問題二:類型不能轉換
  • 問題二解決方法:public LinkedBinaryTree getRight() { 數組

    if (root == null)
    
          return null;
    
      else {
    
          LinkedBinaryTree<T> result = new LinkedBinaryTree<T>();
    
          result.root = root.getRight();
    
          return result;
    
      }

    }數據結構

  • 問題3:如何解決空間不足的問題
  • 問題3解決方案:能夠直接引用ArrayList中的expandCapacity()函數

private void expandCapacity() {學習

T[] larger = (T[]) (new Object[tree.length * 2]);

    for (int index = 0; index < tree.length; index++)

        larger[index] = tree[index];

    tree = larger;

}

代碼託管

(statistics.sh腳本的運行結果截圖)設計

上週考試錯題總結

未考試調試

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分code

  4. 代碼調試中的問題和解決過程, 一個問題加1分

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評模板:

  • 博客中值得學習的或問題:
    • 同窗們已經有意識的碰見錯誤就截圖,給後面寫博客的各類方便不少,我一直忘記只能從新敲一遍。
  • 代碼中值得學習的或問題:
    • 條條大路通羅馬,好多同窗能夠曲線思惟弄出代碼,聽他們講解後真的很佩服。
  • 基於評分標準,我給本博客打分:11分。得分狀況以下:正確使用Markdown語法+1.教材學習中的問題和解決過程+2.代碼調試中的問題和解決過程+2.感想,體會不假大空+1.錯題學習深刻+1.點評認真,能指出博客和代碼中的問題+1.結對學習狀況真實可信+1.課後題有驗證+1,進度條有記錄+1.

  • 參考示例

點評過的同窗博客和代碼

  • 本週結對學習狀況
  • 上週博客互評狀況

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

  • 每節課的考試讓我十分吃不消,不僅是英語單方面的問題,Java也有許多問題亟待解決,由於課本版本不一樣,找起知識點來比較麻煩。
  • 好多同窗好牛,本身好菜,各類把打好的代碼推翻重來,參考別人代碼改來改去把本身的程序變成了四不像,運行不了,本週更加熟悉了運行一個目的堆了四五個程序的Java常態,繼續虛心學習吧。
  • 實驗做業愈來愈難,我愈來愈菜,隨時gg。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 350/500 2/4 24/38
第三週 512/1000 3/7 22/60
第四周 1158/1300 4/9 35/90
第五週 2905/3000 6/5 24/24
第六週 3927/4000 2/2 26/30
第七週 9041/6000 3/4 30/50

參考資料

相關文章
相關標籤/搜索