2018-2019-1 20172316 《程序設計與數據結構》第三週學習總結

20172316 2017-2018-2《程序設計與數據結構》第三週學習總結

教材學習內容總結

第五章 隊列

隊列是一種線性結構,隊列元素按照FIFO方式處理。html

隊列和棧十分類似,因此只須要學習好前面兩個章節就能夠有效地理解「隊列」的基本概念了。node

其方法的功能上能夠大概地一一對應起來
push-->enqueue
pop-->dequeue
peek-->firstgit

因此在最後經過鏈表、數組來實現隊列的問題和實現棧也很是相似,實現起來很是輕鬆。數組

值得注意的是實現隊列時,要注意兩端(front, rear)而非一端(棧中的peek),因此利用固定數組來實現隊列的效率不高,而動態的鏈表會好得多,爲了有效利用數組的空閒空間,書上採用了環形數組的方式。網絡


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

  • 環形數組(circular array)相關問題

環形數組的大體概念和原理,能夠藉助以前介紹過的循環鏈表進行理解。從概念上來講,若是數組的最後一個索引後面跟的是第一個索引,那麼該數組就可用做環形數組。數據結構

當front和rear指向同一個位置時,這表明的是隊空仍是隊滿呢?
(圖)學習

爲區分兩種狀況,能夠空出一個元素空間,當rear的下一個位置是front時爲滿,當rear和front位置重合時爲空。
(圖)ui

何以達到循環的目的呢(最後一個索引後面跟着第一個索引)?能夠參照書中的例子:設計

public void enqueue(T element)
    {
        if (size() == queue.length) 
            expandCapacity();
    
        queue[rear] = element;
        rear = (rear+1) % queue.length;
    
        count++;
    }
    
private void expandCapacity()
    {
        T[] larger = (T[]) (new Object[queue.length *2]);
    
        for (int scan = 0; scan < count; scan++)
        {
            larger[scan] = queue[front];
            front = (front + 1) % queue.length;
        }
    
        front = 0;
        rear = count;
        queue = larger;
    }

這兩個方法就很好的解釋了環形的實現——經過更新frontrear的值。3d


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

  • 好像實現了雙向鏈表,並打算應用至LinkedQueue中,發現插隊(插在第一個元素以前)的方法思路出現短路。
public void chadui(T element)
    {
        LinearNode<T> node = new LinearNode<>(element);
        if (isEmpty())
            head = node;
        else {
            head.setPrevious(node);
            head = head.getPrevious();
        }
        count++;
    }

(圖)
排在後面的人都跑了,看來是隊伍斷了

public void chadui(T element)
    {
        LinearNode<T> node = new LinearNode<>(element);
        if (isEmpty())
            head = node;
        else {
            node.setNext(head);
            head.setPrevious(node);
            head = head.getPrevious();

        }
        count++;
    }

(圖)
加上node.setNext(head);連接起來,隊伍重連起來。


代碼託管

(statistics.sh腳本的運行結果截圖)


上週考試錯題總結


學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 6/6
第二週 771/771 1/2 16/22
第三週 562/1233 1/3 15/37

結對互評

唐才銘19:對書中的知識點總結到位,網絡文章截圖多了一點;
王文彬29:對書上的內容記述詳細,有獨特看法,也在書本的基礎上提出了新問題;引用材料有點長,但本身理解了吧。

參考資料

相關文章
相關標籤/搜索