20182309 2019-2020-1 《數據結構與面向對象程序設計》第8周學習總結

20182309 2019-2020-1 《數據結構與面向對象程序設計》第8周學習總結

教材學習內容總結

  • 查找
    • 線性查找
    • 二分查找
    • 哈希查找
  • 排序
    • 選擇排序
    • 插入排序
    • 冒泡排序
    • 快速排序
    • 歸併排序

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

  • 問題1:改進冒泡排序
  • 問題1解決方案:設立以個flag,若是有一次沒有交換,那麼排序提早完成
  • 問題2:改進線性查找
  • 問題2解決方案:倒着查找,在0位置放一個哨兵等於查找的值,若是查到哨兵則未找到。能夠少在循環裏判斷一個值。

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

  • 問題1:哈希查找的代碼沒頭緒
  • 問題1解決方案:
public class HashTablelink {
    private final String TAG="HashTablelink";
    private SortedList[] hashArray;
    private int arraySize;
    public HashTablelink(int size){
        arraySize=size;
        hashArray=new SortedList[arraySize];
        for(int i=0;i<arraySize;i++){
            hashArray[i]=new SortedList();
        }
    }
 
    public void displayTable(){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for(int j=0;j<arraySize;j++){
            sb.append(hashArray[j].toString());
            sb.append(",");
        }
        sb.append("]");
        Log.v(TAG,"HastTableLink的值爲:"+sb.toString());
    }
 
    /**
     * 首次哈希
     * 將傳入的key通過hash算法,這裏使用的普通除以數組大小求餘的方法,而實際不是這麼簡單
     * @param key
     * @return
     */
    public int hashFunc(int key){
        return key%arraySize;
    }
 
    /**
     * 插入元素
     */
    public void insert(LinkHash item){
        int key=item.getKey();
        int hashVal=hashFunc(key);//哈希到的下標位置
        hashArray[hashVal].insert(item);
    }
 
    /**
     * 刪除元素
     */
    public void delete(int key){
        int hashVal=hashFunc(key);//哈希到的下標位置
        hashArray[key].delete(key);
    }
 
    /**
     * 查找元素
     */
    public LinkHash find(int key){
        int hashVal=hashFunc(key);//哈希到的下標位置
        LinkHash theLink=hashArray[hashVal].find(key);
        return theLink;
    }
 
}

代碼託管

結對及互評

  • 代碼中值得學習的或問題:
    • 提出與課本不一樣的方法解決問題
  • 基於評分標準,我給本博客打分:11分。得分狀況以下:
    • 正確使用Markdown語法加1分
    • 模板中的要素齊全加1分
    • 教材學習中的問題和解決過程, 二個問題加2分
    • 代碼調試中的問題和解決過程, 一個問題加1分
    • 本週有效代碼超過300分行的加2分
    • 排版精美的加1分
    • 代碼Commit Message規範的加1分
    • 有動手寫新代碼的加1分
    • 結對學習狀況真實可信的加1分

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20182331
      • 閱讀教材第13章章節內容
      • 代碼託管到碼雲上
      • 完成課後自測題,並參考答案學習
      • 完成課後練習題
      • 完成程序設計項目,至少完成pp13.2,pp13.6

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 10000行 30篇 400小時
第一週 138/138 2/2 25/25 學會寫和上傳代碼,會編簡單的輸出程序
第二週 88/226 1/3 30/55 起文件名不能太長
第三週 898/1124 2/5 35/90 Java類裏面的方法和C語言的函數很像
第四周 632/1756 2/7 30/120 能夠用繼承extends簡化重複的代碼
第五週 770/2526 2/9 45/165 --amend -m能夠重命名沒push的文件
第六週 3947/6473 2/11 40/205 接口類的功能要分散,利用多繼承完成功能
第七週 1359/7832 3/14 35/240
第七週 273/8105 1/15 15/255 查找前先排序更好

參考資料

相關文章
相關標籤/搜索