20172325 2018-2019-2 《Java程序設計》第三週學習總結

20172325 2018-2019-2 《Java程序設計》第三週學習總結

教材學習內容總結

1、什麼是隊列?

  • 隊列是一種線性集合,其元素從一端加入,從另外一端刪除;
  • 隊列的元素按照FIFO的方式處理,也就是聽從「先進先出」的原則,第一個進入隊列的元素將是第一個退出的元素;
  • 隊列分爲隊列有隊頭(front)和隊尾(rear),數據從隊尾進入隊列,從隊頭出隊列,隊頭指向隊列的第一個數據,隊尾指向隊列中的最後一個數據。

2、隊列的順序存儲結構

  • (1) 順序隊列的定義: 隊列的順序存儲結構稱爲順序隊列,順序隊列其實是運算受限的順序表。
  • (2)順序隊列的表示: 和順序表同樣,順序隊列利用內存中一段連續的存儲空間來存放當前隊列中的元素。 因爲隊列的隊頭和隊尾的位置是變化的,設置兩個指針front和rear分別指示隊頭元素和隊尾元素,它們的初值在隊列初始化時均應置爲0。
  • (3)順序隊列的基本操做 入隊時:將新元素插入rear所指的位置的後一位。 出隊時:刪去front所指的元素,而後將front加1並返回被刪元素。

3、鏈表實現隊列

  • 對於鏈式隊列,將使用帶頭指針front和尾指針rear的單鏈表實現,front直接指向隊頭的第一個元素,rear指向隊尾的最後一個元素,其結構以下:
  • 之因此選擇單鏈表(帶頭尾指針)而不採用循環雙鏈表或者雙鏈表主要是雙鏈表的空間開銷(空間複雜度,多前繼指針)相對單鏈表來講大了很多,而單鏈表只要新增頭指針和尾指針就能夠輕鬆實現常數時間內(時間複雜度爲O(1))訪問頭尾結點。下面咱們來看看如何設計鏈式隊列: 一、以上述的圖爲例分別設置front和rear指向隊頭結點和隊尾結點,使用單鏈表的頭尾訪問時間複雜度爲O(1)。 二、設置初始化空隊列,使用front=rear=null,而且約定條件front==null&&rear==null成立時,隊列爲空。 三、出隊操做時,若隊列不爲空獲取隊頭結點元素,並刪除隊頭結點元素,更新front指針的指向爲front=front.next 四、入隊操做時,使插入元素的結點在rear以後並更新rear指針指向新插入元素。 五、當第一個元素入隊或者最後一個元素出隊時,同時更新front指針和rear指針的指向。 這一系列過程以下圖所示:

4、數組實現隊列

  • 因爲隊列操做會修改集合的兩端,所以將一端固定於索引0處要求移動元素。
  • 非環形數組實現的元素移位,將產生O(n)的複雜度。
  • 把數組看做是環形的,能夠除去在隊列的數組實現中把元素移位的須要。

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

  • 問題1:什麼是溢出?溢出有哪些狀況?html

  • 問題1解決方案: 順序表的溢出現象: (1)「下溢」現象 當隊列爲空時,作出隊運算產生的溢出現象。「下溢」是正常現象,經常使用做程序控制轉移的條件。 (2)"真上溢"現象 當隊列滿時,作進棧運算產生空間溢出的現象。「真上溢」是一種出錯狀態,應設法避免。 (3)"假上溢"現象 因爲入隊和出隊操做中,頭尾指針只增長不減少,導致被刪元素的空間永遠沒法從新利用。當隊列中實際的元素個數遠遠小於內存中本分配的空間時,也可能因爲尾指針已超越向量空間的上界而不能作入隊操做。該現象稱爲"假上溢"現象。以下圖 前端

  • 問題2:隊列的基本操做方式有哪幾種,爲什麼在網絡上查找具體指令時出現不少不一樣的叫法,到底哪一些是規範的操做?git

  • 問題2解決方案:首先查找了課本,看了同窗的博客,總結出了五種具體的操做指令: enqueue:向隊列末端添加一個元素 dequeue:從隊列前段刪除一個元素 first:考察隊列前端的那個元素 isempty:斷定隊列是否爲空 size:肯定隊列的元素數目 關於網絡上的不一樣指令,詢問了課表明餘坤澎同窗,他給個人解釋是,這些不一樣的指令雖然有不一樣的叫法,可是都是爲了達到同一目的,可是比較規範的也就是經常使用的、約定俗成的一些叫法,不用太在乎叫法上的不一樣。數組

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

  • 問題1:在實現PP5.7的時候跑出了這個異常,目測應該是空指針異常。 網絡

  • 問題1解決方案:斷點測試以後,發現異常出在下面這個地方, 學習

因爲count值沒有自增,致使了指針指向空的狀況。加上count++以後運行正常。 測試

代碼託管

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

上週考試錯題總結

本週未測試,沒喲錯題總結。設計

結對及互評

結對夥伴201723063d

  • 博客中值得學習的或問題:

    • 對於隊列的具體操做指令總結比較完善,很好的彌補了我在這方面的不理解;
    • 代碼問題總結詳細
    • 教材問題解決之後闡述的不是特別清楚
  • 代碼中值得學習的或問題:

    • 內容詳細
    • 在規範性上須要稍加註意。
  • 基於評分標準,我給本博客打分:8分。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 20/20
第二週 941/8481 2/2 18/20
第三週 653/9134 3/3 22/20

參考資料

相關文章
相關標籤/搜索