20172318 2018-2019-1 《程序設計與數據結構》第3周學習總結

20172318 2018-2019-1 《程序設計與數據結構》第3周學習總結

教材學習內容總結

隊列

  • 概述
    • 隊列是一種線性集合,其元素從一端加入,從另外一端刪除
    • 隊列的元素是按FIFO方式處理的。第一個進入的元素,也就是第一個退出的元素
  • 用鏈表實現隊列
    • 除了一個指向鏈表首元素的引用(稱爲head)以外,還須要跟蹤另外一個指向鏈表末元素的引用(稱爲tail),還要用一個整型變量count來跟蹤隊列中的元素數目。
    • 若是是往鏈表前端添加新結點,那麼就把該新結點的next指針設置爲指向鏈表的head變量,把head變量設置爲指向新結點。若是是往鏈表的末端添加新結點,那麼就把鏈表末端結點的next指針設置爲指向新結點,而後把鏈表的tail設置爲指向新結點。
    • 鏈表實現隊列的其餘操做至關簡單,它們相似於棧的相應操做。只要返回一個指向隊列前端元素的引用便可實現first操做。當元素數目爲0時isEmpty操做返回true,不然返回falseosize操做只要返回隊列中的元素數目便可。html

  • 用數組實現隊列
    • 基於數組的隊列實現策略就是將隊列的某一端(好比前端)固定在數組的索引0處。全部元素會不間斷地存放在數組中。
    • 與ArrayStack實現中的top變量相似,整型變量rear用於代表數組中的下一個空閒單元。注意,rear還表示了隊列中的元素數目。
    • 因爲隊列操做會修改集合的兩端,所以將一端固定於索引0處要求移動元素。
    • 把數組看做是環形的,能夠除去在隊列的數組實現中把元素移位的須要·

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

這周內容和上週差很少 在隊列的理解和實現沒遇到什麼困難,具體的問題也只有雙向隊列的實現問題,解決方案已在下文給出前端

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

public void addFirst(Item item) {
        if (item == null)
            throw new NullPointerException("can't add null element!");
        Node first = new Node();
        first.item = item;
        first.prev = nil;
        first.next = nil.next;
        nil.next.prev = first;
        nil.next = first;
        n++;
    }

    public void addLast(Item item) {
        if (item == null)
            throw new NullPointerException("can't add null element!");
        Node last = new Node();
        last.item = item;
        last.next = nil;
        last.prev = nil.prev;
        nil.prev.next = last;
        nil.prev = last;
        n++;
    }

    public Item removeFirst() {
        if (isEmpty())
            throw new NoSuchElementException("Can't remove from empty deque");
        Node del = nil.next;
        Item item = del.item;
        del.next.prev = nil;
        nil.next = del.next;
        n--;
        return item;
    }

    public Item removeLast() {
        if (isEmpty()) throw new NoSuchElementException("Stack underflow");
        Node del = nil.prev;
        Item item = del.item;
        del.prev.next = nil;
        nil.prev = del.prev;
        n--;
        return item;
    }

上週考試錯題總結

上週沒有進行測試,因此沒有錯題總結git

代碼託管

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172312
    • 結對學習內容
      • 課本第五章

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 500/500 1/2 15/ 23
第五週 802/1302 1/3 12/35

參考資料

相關文章
相關標籤/搜索