隊列簡單的筆記

1.線性結構

1)線性結構作爲最常用的數據結構,其特點是數據元素之間存在一對一的線性關係
2)線性結構有兩種不同的存儲結構,即順序存儲結構(數組)和鏈式存儲結構(鏈表)。順序存儲的線性表稱爲順序表,順序表中的存儲元素是連續的
3)鏈式存儲的線性表稱爲鏈表,鏈表中的存儲元素不一定是連續的,元素節點中存放數據元素以及相鄰元素的地址信息
4)線性結構常見的有:數組、隊列、鏈表和棧,後面我們會詳細講解.

2.非線性結構

非線性結構包括:二維數組、多維數組、廣義表、樹結構、圖結構

3.稀疏數組(sparse array)

1)基本介紹
當一個數組中大部分元素爲0,或者爲同一個值的數組時,可以使用稀疏數組來保存該數組。

2)稀疏數組的處理方法是:
(1)記錄數組一共有幾行幾列,有多少個不同的值
(2)把具有不同值的元素的行列及值記錄在一個小規模的數組中,從而縮小程序的規模

3)應用實例
(1)使用稀疏數組,來保留類似前面的二維數組(棋盤、地圖等等)
(2)把稀疏數組存盤,並且可以從新恢復原來的二維數組數
(3)整體思路分析

image

<一>二維數組 轉 稀疏數組的思路
1)遍歷 原始的二維數組,得到有效的數據的個數sum
2)根據sum就可以創建稀疏數組是sparseArr int[sum+1][3]
3)將二維數組的有效的數據存入到稀疏數組
<二 >稀疏數組 轉 二維數組的思路
1)先讀取稀疏數組的第一行,根據第一行的數據,創建原始的二維數組,比如上面的chessArr2 = int[11][11]
2)在讀取稀疏數組後幾行的數據,並賦給原始的二維數組即可

代碼實現

4.隊列

1)隊列介紹
(1)隊列是一個有序列表,可以用數組或是鏈表來實現。
(2)遵循先入先出的原則。即:先存入隊列的數據,要先取出。後存入的要後取出

1)數組模擬隊列
(1)隊列本身是有序列表,若使用數組的結構來存儲隊列的數據,則隊列數組的聲明如下圖,
   其中maxSize是該隊列的最大容量。
(2)因爲隊列的輸出、輸入是分別從前後端來處理,因此需要兩個變量front及rear分別記錄
   隊列前後端的下標,front會隨着數據輸出而改變,而rear則是隨着數據輸入而改變

image

思路分析
1)將尾指針往後移:rear+1,當front==rear【空】
2)若尾指針rear小於隊列的最大下標maxSize-1,則將數據存入rear所指的數中組元素中,否則無法存入數據。rear==maxSize-1[隊列滿]

代碼實現

問題分析優化
1)目前數組使用一次就不能用了,沒有達到複用的效果
2)將這個數組使用算法,改進成一個環形數組 取模:%

5.環形隊列

對前面的數組模擬隊列的優化,充分利用數組.

因此將數組看做是一個環形的。(通過取模的方式來實現即可)
分析說明:
1)尾索引的下一個爲頭索引時表示隊列滿,即將隊列容量空出一個作爲約定,這個在做
  判斷隊列滿的時候需要注意(rear+1)%maxSize==front滿]
2)rear==front[空]

image

思路如下:
1)front變量的含義做一個調整:front就指向隊列的第一個元素,也就是說arffront]就是
  隊列的第一個元素front的初始值=0
2)rear變量的含義做一個調整:rear指向隊列的最後一個元素的後一個位置.因爲希望空出
  一個空間做爲約定.rear 的初始值=0
3)當隊列滿時,條件是(rear+1)%maxSize=front【滿】
4)對隊列爲空的條件,rear==front空
5)當我們這樣分析,隊列中有效的數據的個數(rear+maxSize-front)%maxSize

代碼實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章