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:肯定隊列的元素數目 關於網絡上的不一樣指令,詢問了課表明餘坤澎同窗,他給個人解釋是,這些不一樣的指令雖然有不一樣的叫法,可是都是爲了達到同一目的,可是比較規範的也就是經常使用的、約定俗成的一些叫法,不用太在乎叫法上的不一樣。數組
代碼調試中的問題和解決過程
因爲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 |
|
參考資料