佇列容量為maxsize 。
佇列的頭部由front記錄,front指向頭部元素的前乙個位置;rear記錄佇列尾部,rear指向尾部元素。front和rear是陣列的下標。(注意,這裡非常重要也比較容易混淆,front不是指向頭部元素,而rear是指向尾部元素)。
當元素入列時,rear數值加1;元素出列時,front數值加1。
這裡顯然,該佇列有乙個缺陷:當有maxsize數量的元素出列時或rear為maxsize - 1時,無法再有元素可以入列。那麼這就是乙個一次性佇列,實際應用不是很大。
前面我們了解到"一次性"陣列的侷限性。現在我們來改造一下陣列,通過取模運算把陣列想象成乙個環狀的資料順序儲存結構。
front指向陣列的第乙個元素,front初始值為0;rear指向最後元素的後乙個位置,初始值為0(因為環狀的特點,最後元素的後乙個位置為0)。
陣列可以儲存maxsize個元素。
當(rear + 1)% maxsize == front時佇列滿。
當rear == front佇列空。
public
class
circlequeue
/** * judge if the array is empty.
* @return, a boolean value
*/public
boolean
isempty()
/** * judge if the array is full.
* @return, a boolean value
*/public
boolean
isfull()
/** * make a new element queue in.
* @param element, new element which queue in to the array.
*/public
void
queuein
(int element)
//rear向後移動乙個位置,這裡的取模運算是防止溢位,也是達到迴圈效果。
this
.rear =
(this
.rear +1)
%this
.maxsize;
}/**
* make the front element queue out.
* @return, the front element
*/public
intqueueout()
throws exception
int temp =
this
.array[
this
.front]
;this
.front =
(this
.front +1)
%this
.maxsize;
return temp;
}/**
* get a number indicating the elements in array.
* @return, int value
*/public
intgetelementnumber()
/** * print out all elements in array according to the order.
*/public
void
printarray()
}/**
* peek the front element.
* @return, the front element.
* @throws exception, throw exception if the array is empty.
*/public
intpeek()
throws exception
return
this
.array[
this
.front];}
}
資料結構之佇列和環形佇列
佇列實現 1.佇列是一種有序列表,遵循先進先出的原則。1.陣列模擬佇列,分別有隊頭和隊尾指標,從 1開始,進隊時隊尾指標自增,出隊時隊頭指標自增,隊頭是指向第乙個資料的前乙個位置。示意圖如下 package array public class queuearray 使用陣列模擬佇列 編寫乙個arr...
基礎資料結構和演算法 5 佇列
1.佇列是什麼?佇列是一種只能從表的一端存資料另一端取資料且遵循fifo 先進先出 原則的線性儲存結構。通常只會對佇列執行以下兩種操作 資料元素進佇列的過程稱為 入隊 出佇列的過程稱為 出隊 佇列與棧的比較 2.佇列怎麼用?佇列一般用來處理與等待相關的處理。3.佇列怎麼實現?考慮到每次出隊和入隊都要...
資料結構和演算法 佇列
佇列 通俗點的定義就是,排隊買票,先到的先買。就是先進先出。佇列和棧一樣都是操作受限的線性表資料結構 在隊尾入隊,隊頭出隊。同樣想象買票的流程。除非你經常插隊要不很容易理解!順序佇列 用陣列實現的佇列 鏈式佇列 用鍊錶實現的佇列 1 順序佇列的python 實現 首先說一下順序佇列的實現過程。與棧只...