20182304 《數據結構與面向對象程序設計》第七週學習總結

20182304 《數據結構與面向對象程序設計》第七週學習總結

教材學習內容總結

  • 時間複雜度分析:時間複雜度越低,程序運行效率越高。時間複雜度又稱爲算法的階,符號計爲O(),它由增加函數的主項決定。能夠經過數學方法求出增加函數從而肯定程序的時間複雜度html

  • 線性集合:集合中的元素按直線方式組織。如:隊列集合、棧集合
  • 棧是一種線性數據結構,採用後進先出(Last in,first out)的方法處理元素,咱們學習使用了數組和鏈表來實現棧
  • 鏈表:鏈表是鏈式結構的一種。在鏈表中,對象引用變量也可稱爲指針,鏈表中存儲的對象泛稱爲結點
    • 對象引用變量保存的是對象的地址,因此鏈表的頭很重要,必須使用一個單獨的引用變量指向表的第一個節點
    • 鏈表終止於其next引用爲空的結點
    • 訪問元素的惟一方法是從第一個元素開始,遍歷整個鏈表直至找到所需元素
    • 插入結點:插入結點須要先設置一個臨時的結點用來防止指針丟失,改變引用順序是其關鍵
    • 刪除節點:只需被刪節點的前一個結點指向後一個節點就能夠了 ,刪除第一個節點須要特殊處理,或增長哨兵節點
    • 哨兵節點:簡化斷定邊界條件,提升程序效率,減小出錯機率
  • 隊列:先進先出(First In First Out),第一個進入的元素也將是第一個退出的元素,概念比較容易理解。
    • 隊頭(front或head):取出數據元素的一端。
    • 隊尾(rear或tail):插入數據元素的一端。
    • 可使用循環數組來實現隊列,減小空間浪費

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

  • 問題1:在實現棧的過程當中,咱們使用了泛型T,泛型的概念和做用是什麼呢?
  • 問題1解決方案:泛型是一種能夠存儲、操做和管理在實例化以前沒有指定類型的對象的一個類,一般用做爲標識符。泛型不能被實例化,它只是一個佔位符,容許咱們去定義管理特定類型的對象的類。
    泛型和Object類比較起來有很大不一樣,Object是一個能夠實例化的變量,要進行強制轉換才能賦給別的數據類型變量。而泛型T從一開始就被限定了。在以前的安卓做業中,我設置的泛型在比較時不能強制轉化,最後只能改變成固定類型int
  • 問題2:比較鏈表和數組之間的效率差別
  • 問題2解決方案:數組能夠直接訪問或修改某一點的值,鏈表必須從頭開始,順藤摸瓜,一個一個遍歷才能找到咱們要查找或修改的元素。但若是刪除一個元素,鏈表只要被刪節點的前一個結點指向後一個節點就能夠,而數組刪除一個元素後,其餘後面的每個元素要移動一位到前面來補充那個空缺的位置,此時效率比較低

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

  • 問題1:編寫中綴表達式轉換爲後綴表達式時沒有思路
    java

  • 問題1解決方案:首先咱們要回顧後綴表達式的意義。若是不考慮括號的問題。將操做數直接輸出,將符號入棧,等到遇到其餘符號或到達末尾是出棧,最後用字符串鏈接起來,程序是不難編寫的(最後發現題目看錯了,這題白寫了)
  • 問題2:在用循環數組實現隊列時,rear和front指向同一元素時,如何判斷隊列的狀態,究竟是盡是空
  • 問題2解決方案:每次出隊時,將該隊列元素置空,若是兩個指針重合,判斷此時當前元素是否爲空,若非空,即全滿。若空,則說明該隊列爲空。
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;
    }

代碼託管

git

算法

上週考試錯題總結

- 無

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • 問題:總結內容過少,問題研究不深刻
  • 代碼中值得學習的或問題:
    • 問題:代碼思路不夠清晰,思路不夠明確
  • 基於評分標準,我給本博客打分:14分。數組

  • 參考示例數據結構

點評過的同窗博客和代碼

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

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

  • 鏈表和數組使用時都須要特殊注意,不然很容易就會發生地址越界

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第五週 1600/2900 2/11 20/110
第六週 981 /3881 2/12 25/135
第八週 1700/5518 3/15 45/180
第四周 300/1300 2/9 30/90

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

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法學習

  • 計劃學習時間:30小時設計

  • 實際學習時間:25小時指針

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索