20172321 2018-2019《Java軟件結構與數據結構》第三週學習總結

教材學習內容總結

第五章

  • 5.1概述
  • 隊列是一種線性集合,其元素從一端加入,從另外一端刪除;隊列的處理方式是先進先出(First in First out)。
  • 與棧的比較(LIFO)
  • 棧是一端操做,先進後出

  • 隊列是兩端操做,先進先出

  • 棧的一些操做html

    操做 描述
    enqueue 向隊列末端添加一個元素
    dequeue 從隊列前端刪除一個元素
    first 考察隊列前端的那個元素
    isEmpty 斷定隊列是否爲空
    size 斷定隊列中的元素數目
    toString 返回隊列中的字符串表示
  • 5.2javaAPI中的隊列:Java集合API並無提供隊列類,而是提供了一個Queue接口,由多個類(包括LinkedList類)來實現的。
  • 5.5隊列ADT
    • 接口類中的各個方法
public interface QueueADT<T> {

    public void enqueue(T element);
    public T dequeue();
    public T first();
    public  boolean isEmpty();
    public  int size();
    public String toString();
}
}
  • 5.6用鏈表實現隊列:要用鏈表實現棧,就要操做鏈表的兩端。
    • 需建立兩個引用:一個指向鏈表首元素(head),一個指向鏈表末元素(tail)
    • 另需一個整型變量count來跟蹤隊列中的元素數目
  • 5.7用數組實現隊列
    • 隊列操做會修改集合的兩端,所以將隊列的某一端固定在數組的索引0處,全部元素不間斷地存放在數組中。
    • dequeue操做的複雜度爲O(n),因此用固定數組實現棧的效率較低
  • 5.8雙端隊列
    • 隊列的擴展,容許從隊列的兩端添加、刪除和查看元素。

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

  • 問題1:打教材上的代碼的時候有些地方老是紅色,反覆檢查發現和教材一致沒有打錯,後來知道教材其實有一些問題。

  • 解答:好比說這裏,教材上是
public CircularArrayQueue() {
        this (DEFAULT_CAPACITY);
    }

這個()裏就會報錯,我直接把裏面改爲100就行了前端

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

  • 在做LinkedQueue類的first()方法的時候,我是把鏈表實現棧的peek()方法複製過來修改的,可是測試老是有問題,並且在CircularArrayQueue類也是這麼作出來的卻沒有問題。

  • 最後我仍是不知道爲何,我直接把
//        if (isEmpty())
//            throw new EmptyCollectionException("queue");

註釋掉了就能夠了,等我再想一想正常的方法再來修改。java

更新 更新 更新
我發現了是我tostring的方法有問題,原來這樣寫,使用這個方法後棧就被清空了,因此彈出會錯誤,改成以後就能夠了git

代碼託管

上週考試錯題總結

結對及互評

  • 20172324曾程
  • 博客中值得學習的或問題:
    • 書上代碼的學習很到位
    • 代碼調試環節比較詳細,從截圖上來看註釋也很規範整齊,值得學習。
  • 基於評分標準,我給本博客打分:11分。得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 加4分
    • 代碼調試中的問題和解決過程, 加4分
    • 本週有效代碼超過300分行,加2分
    • 進度條中記錄學習時間與改進狀況的加1分

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 671/671 1/2 17/25
第二週 345/1016 1/3 15/40

參考資料

相關文章
相關標籤/搜索