是一種資料結構,遵守著「先進先出」的原則,是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表,有點類似我們生活排隊的操作,而這次我們在這裡討論的是以陣列為原型組成的「佇列」
class
arrayqueue
首先我們先定義乙個陣列佇列,並在下面定義幾個對陣列的操作
在入佇列的操作中,需要有以下思考
(1)存入資料後,尾指標後移,並當front == rear時,即表示佇列中的資料為空(或者說已經消費完了)
(2)當尾指標rear小於佇列的最大下標「maxsize-1」,則將資料存放於佇列中,否則則無法存放資料
那麼接下來我們根據陣列佇列,寫乙個構造器
public
arrayqueue
(int maxsize)
並將頭指標和尾指標都定義為-1,意為空佇列。
並根據上面的思考,分別寫出兩個判斷隊列為空或隊列為滿的方法
public
boolean
isfull()
public
boolean
isempty()
其實在這部分也比較簡單,這裡就不多闡述了
public
void
addqueue
(int n)
rear++
; arr[rear]
= n;
}public
intgetqueue()
front++
;return arr[front];}
public
void
showqueue()
for(
int i =
0; i < arr.length; i++)}
public
intheadqueue()
return arr[front+1]
;}}
但是我們也意識到當佇列取出資料後,原來的頭指標增加了一位,可後面的指標卻不能移動到前面,造成了「假滿」,所以迴圈佇列就是為了解決這種操作而誕生的
迴圈陣列佇列對比普通陣列佇列,它能利用頭節點移動後造成的空間浪費,實現對空間的利用
class
circlearrayqueue
它內部私有屬性和普通佇列一樣,只不過它的頭指標在初始化的時候不再是-1,而是0
public
circlearrayqueue
(int maxsize)
在迴圈陣列佇列中,我們要運用一種新的計算方式,通過對尾指標進行取餘的操作,能夠進行尾指標返回到頭部進行計算
所以對於判斷佇列是否為滿,我們更改了一下判斷方式
public
boolean
isfull()
並在原來的基礎上修改了增刪除佇列的操作
public
void
addqueue
(int n)
arr[rear]
= n;
rear =
(rear+1)
% maxsize;
}public
intgetqueue()
int value = arr[front]
; front =
(front+1)
% maxsize;
return value;
}public
void
showqueue()
for(
int i = front; i < front+
size()
; i++)}
public
intsize()
通過這樣小小的改動,就可以讓佇列有了新的用途 陣列佇列和迴圈陣列佇列
public class arrayqueuedemo catch exception e break case h trycatch exception e break system.out.println 程式退出 使用陣列模擬arrayqueue類 class arrayqueue 判斷佇列是...
陣列佇列和迴圈佇列
定義乙個queue的介面 public inte ce queue引入之前自定義的動態陣列array類 出隊時間複雜度是o n 其餘為o 1 public class arrayqueue implements queue public arrayqueue override public int ...
資料結構 陣列佇列 迴圈佇列
佇列 是 先進先出 的資料結構,從隊尾入隊,從隊頭出隊。佇列中使用的array,參考 資料結構 手寫動態陣列 public inte ce queue public class arrayqueue implements queue public arrayqueue int capacity ov...