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

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

教材學習內容總結

  • 算法分析

1.增加函數:表示問題(n)大小與咱們但願最優化的值之間的關係,該函數表示了該算法的時間複雜度或空間複雜度html

2.在n很小時算法差異很小,可是當n很大時,增加函數之間的差異就很明顯。前端

3.漸進複雜度稱爲算法的階次(order)。git

4.O()記法稱爲大O記法。算法

5.算法的階次是忽略該算法的增加函數中的常量和其餘次要項,只保留主項而得出的。後端

6.無論問題是大是小,運行賦值語句和if語句一次,其複雜度就爲O(1)。數組

7.全部具備相同階次的算法,從運行效率的角度來講都認爲是等價的。數據結構

8.增加函數及其漸進複雜度
函數

9.嵌套循環的複雜度度分析:內層循環的複雜度乘之外層循環的複雜度。學習

10.循環運行的複雜度分析:肯定該循環體的階次n,而後用該循環要運行的次數乘以它。循環的時間複雜度等於循環的複雜度乘以該循環的次數。測試

1.棧是一種線性集合,遵循後進先出的原則。

  1. 操做 描述
    push 添加一個元素到棧的頂部
    pop 從棧的頂部移除一個元素
    peek 查看棧頂部的元素
    isempty 肯定棧是否爲空
    size 肯定棧的元素數目

3.棧的全部操做都是在一端進行的

4.類型兼容性:把一個對象賦給引用的特定賦值是否合法。類型檢查:Java會自動在編譯時標記出不合法的賦值。

5.可利用繼承和多態來建立能夠儲存任意類型的對象的集合。

6.泛型:定義一個類,能夠儲存、操做和管理一些實例化以前沒有制定類型的對象。

7.棧是計算後綴表達式的理性數據結構。

8.堆棧:堆棧是一種之後進先出方式(LIFO)管理數據的線性數據結構。

  • 鏈表

1.對象引用變量能夠用來建立鏈式結構。

2.在鏈表中儲存的對象泛稱爲該鏈表的結點。

3.鏈表由一些對象構成,其中每一個對象指向了鏈表中下一個對象。

4.在Java語言中,全部動態建立的對象都來自於一個名爲系統堆或自由儲存的內存區

5.訪問元素:惟一方法是從第一個元素開始,順着該鏈表往下進行。

6.插入結點: 結點能夠插入到鏈表的前端,中間和後端,改變引用順序是維護鏈表的關鍵。

7.刪除結點:無論刪除哪一個結點,都要保證鏈表的完整性。

  • 隊列

1.隊列是一種線性集合,其元素從一端加入,從另外一端刪除,按先入先出的方式處理。

2.前端(隊首):front、head,末端(隊尾):rear、tail,

  1. 操做 說明
    enqueue 向隊列末端添加一個元素
    dequeue 從隊列前端刪除一個元素
    first 考察隊列前端的那一個元素
    isEmpty 斷定隊列是否爲空
    size 斷定隊列中的元素數目
    toString 返回隊列的字符串表示

5.Java集合API提供了Queue接口,由多個類來實現。

6.棧的首要做用是顛倒順序,隊列的首要做用是保持順序。

  • 用鏈表實現隊列

1.指向首元素的引用head,指向鏈表末的引用tail,整型變量count來跟蹤隊列中的元素數目。

2.必須一直認真地,精準地維護特殊狀況下地引用

3.對於一個空隊列,head,tail引用都爲null,count則爲0.

4.enqueue:將當前末元素的next引用設置指向這個新元素,從新將tail設置爲指向這個新添加的末元素。該操做的複雜度爲O(1).

5.dequeue:先判斷隊列是否有元素,若是沒有,拋出異常EmptyCollectionException,若是有元素,則正常刪除第一個元素,若是隻有惟一元素,則刪除隊列元素後,隊列就爲空,把tail引用設置爲null。該操做複雜度爲O(1).

6.enqueue和dequeue操做做用於隊列的對立端。

  • 用數組實現隊列

1.因爲隊列操做會修改集合的兩端,所以將一端固定於索引0處要求移動元素。

2.因爲隊列處理會影響到該集合的兩端,所以從隊列中刪除元素的時候,該策略要求移動元素。

3.非環形數組實現的元素移位,將產生O(n)的複雜度。

4.把數組看做是環形的,能夠除去在隊列的數組實現中把元素移位的須要。

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

問題1:隊列、鏈表和堆棧三者的問題
問題1解決方案:隊列和堆棧是兩個相似鏈表的線性數據結構,但在使用時有更多的限制。對於通常的鏈表,能夠經過鏈表的任意位置插入和刪除節點進行修改,可是隊列只能在一端加入節點(入隊)(入棧),在另外一端一處節點(出隊)(出棧),所以隊列是先進先出(FIFO)數據結構,堆棧是後進先出(LIFO)數據結構。

問題2:節點是什麼意思。
問題2解決方案:能夠說是結構體,節點就是一個帶有指針指向的結構體,把相鄰的點關聯起來,能夠把鏈表想象成火車,節點就是其中一節節的車箱,經過通道和先後車箱相連。

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

問題1:在實現ArrayOrderedListTest測試時,我遇到了顯示最後一個數字時顯示爲null。
問題1解決方案:我對前面ArrayList類檢查時,發現我在顯示last時,將rear-1不當心寫成rear了,因此它所讀取的是最後一個後邊的,因此確定爲空

代碼託管

上週考試錯題總結

  • 上週無測試

結對及互評

  • 博客中值得學習的或問題:
    • 學習深入,本身有方法
    • 代碼中值得學習的或問題:
    • 使用繼承減小代碼的重複編寫
    • 基於評分標準,我給本博客打分:8分。得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 一個問題加1分
    • 代碼調試中的問題和解決過程, 一個問題加1分
    • 有動手寫新代碼的加1分
    • 結對學習狀況真實可信的加1分

點評過的同窗博客和代碼

  • 本週結對學習狀況
  • 20182309
    • 結對學習內容
      • 教材第12章、第14章和教材第15章

      • 閱讀課本章節內容
      • 代碼託管到碼雲上
      • 完成課後自測題,並參考答案學習
      • 完成課後練習題
      • 完成程序設計項目,至少完成pp14.1,pp14.7,pp15.1,pp15.

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 109/109 2/2 20/20
第2、三週 729/838 2/4 47/67
第四周 750/1588 2/6 22/89
第五週 1588/2698 2/7 34/133
第六週 1350/4035 2/9 24/157
第九周 4701/7399 5/14 97/254

參考資料

相關文章
相關標籤/搜索