資料結構學習筆記 佇列篇

2021-10-08 22:18:17 字數 3035 閱讀 9407

佇列是乙個有序列表,可以用陣列或是鍊錶來實現。

遵循先入先出的原則。即:先存入佇列的資料,要先取出。後存入的要後取出

用陣列模擬佇列示意圖

maxsize:陣列的長度

rear:指向佇列的最後乙個元素的後乙個位置

front:指向佇列中第乙個元素的位置

順序佇列

當佇列中元素為空時

向佇列中新增元素時

將元素新增到rear指向的位置中,再將rear後移一位

向佇列中取出元素時

將當前front指向的位置中的元素取出,再將front後移一位

1.當rear == front時,隊列為空,不可取出資料

2.當rear == maxsize時,佇列已滿,不可新增資料

**實現

class

queue

//判斷是否為空

public

boolean

isnull()

//判斷是否已滿

public

boolean

isfull()

//新增

public

void

add(

int x)

//將元素新增到當前rear指向的位置,並將rear後移一位

arr[rear++

]= x;

}//取出

public

intget()

//檢視佇列中的元素

public

void

show()

system.out.

println()

;}public

void

showfirst()

system.out.

println

(arr[front]);

}}

順序佇列的缺點

在上圖中我們的佇列最大容量為6,也就是說,只要沒有取出元素數量(有效元素數量)沒有超過該值時,我們就可以繼續新增,但事實上,我們在新增到佇列滿,然後取出元素後,仍然無法繼續新增,原因在於我們元素被取出後的空間

無法繼續利用,導致「假溢位」。為了解決這一問題,環形佇列由此誕生。

環形佇列

環形佇列中解決「假溢位」的方法

當新增元素後,佇列已滿時,會將rear指標指向陣列的第乙個位置

新增元素時

與順序佇列相同,但為了保證rear永遠小於maxsize,在rear後移一位後再與maxsize進取模運算

取出元素時

與順序佇列相同,但為了保證front永遠小於maxsize,在front後移一位後再與maxsize進取模運算

但這裡又有了新的問題,我們無法通過front == rear來判斷當前為空

隊列為空時

佇列已滿時

此時我們需要空出乙個位置作為「約定」

也就是說,只要佇列中還剩乙個位置時,此時的佇列已滿

判斷佇列已滿:(rear+1) %maxsize == front

判斷隊列為空:rear == front

計算佇列中有效元素數量:(rear - front + maxsize) % maxsize

**實現

class

queue

//判斷是否為空

public

boolean

isnull()

//判斷是否已滿

public

boolean

isfull()

//新增

public

void

add(

int x)

//將元素新增到當前rear指向的位置,並將rear後移一位

arr[rear]

= x;

rear =

(rear +1)

% maxsize;

}//取出

public

intget()

//檢視佇列中的元素

public

void

show()

system.out.

println()

;}//計算當前佇列中的有效個數

private

inteffectivequantity()

public

void

showfirst()

system.out.

println

(arr[front]);

}}

資料結構學習 佇列

定義 佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的 first in first out 的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q a1,a2,an 那麼a1就是隊頭元素,而a...

資料結構學習筆記 鍊錶篇

什麼是鍊錶 特點 資料元素的儲存對應的是不連續的儲存空間,每個儲存結點對應乙個需要儲存的資料元素。每個結點是由資料域和指標域組成。元素之間的邏輯關係通過儲存節點之間的鏈結關係反映出來。邏輯上相鄰的節點物理上不必相鄰。缺點 1 比順序儲存結構的儲存密度小 每個節點都由資料域和指標域組成,所以相同空間內...

資料結構學習筆記 棧 佇列 (習題)

1.引言 本文主要講解棧和佇列的一些常見的面試題。2.一些常見的面試題 2.1 題目 輸入兩個整數序列。其中乙個序列表示棧的push順序,判斷另乙個序列有沒有可能是對應的pop順序。為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。比如輸入的push序列是1 2 3 4 5,那麼4 5 ...