做業八

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

教材學習內容總結

樹結構html

  • 一、一對多關係的複雜結構(例:家譜、單位組織結構、DNS結構、人機大戰)
    IP地址可變,經過解析DNS獲得新IP
  • 二、getroot();grtparent();getChildCount();getFirstChild;getNextChild();
  • 三、雙親表示法
    孩子表示法
    雙親孩子表示法(孩子兄弟表示法(僅做了解))
  • 4二叉樹
    結點度數至多爲2;
    有序樹:子樹有左右之分
    二叉樹第i層最多有2^i-1個結點
    深度爲k的二叉樹最多有2^k-1個結點
    對於任何一顆二叉樹,若是其葉結點個數爲n0,度爲2的節點數爲n2
    則n0=n2-12
    查找
  • 線性查找:

    一、查找性能評價:平均查找長度ASL

    ASL=(求和)p(i)*c(i)

    查找第n個元素比較次數和時間乘積前端

  • 折半查找(必須有序)

    一、 n/2^m=1;m爲查找次數0java

  • 分塊查找

    一、起點+該塊最大值/最小值

    二、效率位於前二者之間
  • 哈希表

    一、 x%y=5,則將x放於5號位

    二、31%13=5,18%13=5

    (直接定址法:
    數字分析法
    平方取中法)自行設計
    除留餘數法

    三、解決衝突方法(1)開放定址法不斷+1直至找到空
    (2)再哈希(不要求掌握)(3)鏈地址法創建git

排序程序員

  • 一、插入排序(例如打牌理牌過程)

    直接插入 (從後往前依次比較,設置監督哨)
    折半插入 ()
    2-路插入(兩頭定數分別比較插入,若是是在兩端之間的數,自行設計放在前端仍是後端)

    希爾排序

    冒泡排序
  • 二、交換排序
  • 三、選擇排序
  • 四、基數排序
  • 五、歸併排序
  • 性能評價:1時間效率2空間效率3穩定性(a\b數值相同且a在b前,排序後依舊a在b前)

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

  • 問題1:哨兵的設立及其做用?
  • 問題1解決方案:哨兵結點一般在排序中使用,可提升效率。設爲a[0],實際上原來的棧並不表明表中的元素。使用哨兵結點,實現帶哨兵結點或虛位結點做爲第1個結點的表,能夠去掉處理第 1 個結點這種特殊情形
  • 問題2: 對pop,push等存在以往和疑問
  • 問題2解決方案:經過仔細閱讀理解老師所給ppt理解pop和push做用
  • 問題3:對字符流,字節流理解存在困難
  • 問題3解決方案:經過交流詢問和查閱課本找到相關概念區別。:字符流使用了緩衝區,而字節流沒有使用緩衝區。在字節流中輸出數據主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類完成,輸入流主要使用Reader類完成。(這四個都是抽象類)。

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

  • 問題1:如何判斷隊列是空仍是滿?.
  • 問題1解決方案:
  • public T dequeue() throws EmptyCollectionException {
      T num1;
      if (front == rear && queue[front] == null)
          throw new EmptyCollectionException("Empty!!!");
      else {
          num1 = queue[front];
          queue[front] = null;
          front = (front + 1) % queue.length;
          count--;
      }
      return num1;
      }
  • 問題2::棧中空間不足
  • 問題2解決方案:能夠利用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;
          }
      }
  • 問題3: 選擇排序法和冒泡排序法記混
  • 問題3解決方案:選擇排序法指從數組中找到最小的元素,和第一個位置的元素互換。從第二個位置開始,找到最小的元素,和第二個位置的元素互換。直到選出array.length-1個較小元素,剩下的最大的元素自動排在最後一位。冒泡排序指
    從前日後,依次比較相鄰的兩個數,把較大的數放到後面。一次循環,能夠在當前最末尾位置獲得一個當前最大值。
  • 選擇排序:
  • public class Selection {
      public static void sort(int[] arr){
      for(int i=0; i<arr.length-1; i++) {
          int minPos = i;
          for (int j = i; j < arr.length; j++) {
              if (arr[j] < arr[minPos]) {
                  minPos = j;//找出當前最小元素的位置
              }
          }
          if(arr[minPos]!=arr[i]) {
              swap(arr,minPos,i);
          }
      }
      }
      public static void swap(int[] arr,int a,int b){
          int temp = arr[a];
          arr[a] = arr[b];
          arr[b] = temp;
      }
      }
  • 冒泡排序:
  • public class Bubble {
      public static void sort(int[] arr){
      int temp;
      //依次將最大的數放置到數組末尾,將第二大的數放到倒數第二位...
      for(int i = 0;i < arr.length-1;i++){
          //從前日後,比較相鄰兩個數,把大的放在後邊.以前已放置成功的能夠再也不參與比較
          for(int j = 0;j < arr.length-1-i;j++){
              if(arr[j]>arr[j+1]) {
                  swap(arr,j,j+1);
                  changed = true;
              }
          }
      }
      }
      public static void swap(int []arr,int a ,int b){
      int temp=arr[a];
      arr[a] = arr[b];
      arr[b] = temp;
      }
      }

代碼託管 (書中代碼)[https://gitee.com/besti1823/20182302shiyanyi00/tree/master/zuoye8]

上週考試錯題總結

  • 上週未進行測試,如下爲部分過去測試錯題
  • Polymorphism is achieved by
    A .overloading
    B .overriding
    C .embedding
    D .abstraction
    E .encapsulation
  • 重載只是爲具備不一樣參數列表的方法提供了替代方法。重寫提供了多態性,由於根據當前被引用的對象調用相應的方法。嵌入是類中類的封閉。抽象與多態性無關。使用可見性修飾符(public、private、protected)實現封裝。
  • Which statement is completely true?
    A .Java upcasts automatically, but you must explicitly downcast
    B .Java downcasts automatically, but you must explicitly upcast
    C .Java expects the user to explicitly upcast and downcast
    D .Java will both upcast and downcast automatically
    E .The rules for upcasting and downcasting depend upon whether classes are declared public, protected, or private
  • upcasting是徹底安全的,它是java支持的單一繼承結構的產物。相比之下,向下轉換必須由程序員顯式地完成。Java只在一個方向上自動進行強制轉換。上下投射的規則不依賴於使用中的可見性修改器。
  • What is the efficiency of binary search?
    A .n^2
    B .n
    C .log2 n
    D .n/2
    E .none of the above
  • 使用每一個比較,二進制搜索消除了剩下的數據的大約一半。此過程將繼續,直到找到所需的元素或消除全部可能的數據。因爲有n個數據元素,在數據量小於1個元素以前,能夠將數據減半的次數爲log2n。
  • A polymorphic reference can refer to different types of objects over time.隨着時間的推移,多態引用能夠引用不一樣類型的對象。這就是多態性的意義所在:後期綁定。這意味着在程序執行時,相同的名稱將與不一樣的語義相關聯。
  • A reference variable can refer to any object created from any class related to it by inheritance.這是一種用來完成多態引用的技術,它的精確解釋將在執行期間發生變化,這取決於遇到變量時引用的精確對象。
  • An interface reference can refer to any object of any class that implements the interface.
  • 接口引用能夠引用實現接口的任何類的任何對象。這是使用接口名稱聲明引用變量的多態函數之一。
  • A method's parameter can be polymorphic, giving the method flexible control of its arguments.
  • 方法的參數能夠是多態的,使方法靈活地控制其參數。爲了實現這一點,僅使用接口名或基類名來聲明變量。而後參數是多態的,在執行期間引用類的正確實例,在執行期間訪問正確的語義。
  • If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but can not redefine x to be a different type.
  • 派生類能夠從新定義父類的任何實例數據或方法。父類的版本如今是隱藏的,可是能夠經過使用super來訪問,如在super.x中同樣。
  • Although classes can be inherited from one-another, even Abstract classes, interfaces cannot be inherited.
    A .true
    B .false
  • 接口具備普通類所具備的全部繼承屬性。所以,您能夠建立接口繼承層次結構,就像建立類繼承層次結構同樣。可是,您不能作的是實例化一個必須實現的接口。
  • A Java program can handle an exception in several different ways. Which of the following is not a way that a Java program could handle an exception?
    A .ignore the exception
    B .handle the exception where it arose using try and catch statements
    C .propagate the exception to another method where it can be handled
    D .throw the exception to a pre-defined Exception class to be handled
    E .all of the above are ways that a Java program could handle an exception
  • 若是代碼包含在try語句中並實現了相應的catch語句,則拋出的異常要麼被當前代碼捕獲,要麼被傳播到調用致使異常的方法並在相應的catch語句中捕獲的方法,或者它繼續經過方法傳播,傳播順序與調用這些方法的順序相反。可是,一旦達到主方法,此過程就會中止。若是沒有在那裏捕獲,異常將致使程序終止(這將是答案A,異常被忽略)。可是,不會向異常類拋出異常。後端

    結對及互評

點評:

  • 博客中值得學習的或問題:
    • 問題:排版能力仍需提升
  • 代碼中值得學習的或問題:
    • 本週代碼總量較上多
    • 對本週知識點進行及時複習,上課認真聽講記錄
    • 代碼編寫時規範性有待提升
  • 基於評分標準,我給本博客打分:13分。得分狀況以下:正確使用Markdown語法(加1分)模板中的要素齊全(加1分)教材學習中的問題和解決過程(加2分)代碼調試中的問題和解決過程(加2分)本週有效代碼超過300分行(加2分)感想,體會不假大空(加1分)進度條中記錄學習時間與改進狀況(加1分)結對學習狀況真實可信(加1分)有動手寫新代碼(加1分)點評認真,能指出博客和代碼中的問題的(加1分)

點評過的同窗博客和代碼

  • 本週結對學習狀況
  • 結對學習內容
    • 棧的pop,push,isEmpty,expandCapacity,peek
    • 利用安卓實現相關代碼
      -隊與棧的區別和聯繫
  • 上週博客互評狀況

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

平時缺乏複習,對知識點記錄應向其餘同窗學習。棧,隊相關操做有待多練習,對於樹結構理解不夠,仍需繼續學習。數組

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 6000行 25篇 300小時
第一週 143/143 2/2 7/7 學會對虛擬機進行基礎設置,學會git程序簡單使用
第二週 388/531 3/5 10 /17 學會部分基礎編碼,掌握循環格式話輸出等內容
第四周 807/1338 1/6 17/34 學會運用IDEA編寫和測試代碼
第五週 1289/2096 2/8 17/51 學會運用IDEA編寫和測試代碼
第六週 1005/3101 2/10 19/70 學會繼承封裝多態
第七週 2240/5341 2/12 15/85 學習棧,隊相關操做
第八週 404/5745 2/14 17/102 學習查找,排列相關操做

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。安全

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法數據結構

相關文章
相關標籤/搜索