可以用乙個陣列來實現乙個佇列,那如果將陣列的尾巴和頭連線起來,是不是構成乙個迴圈佇列了呢
從順序佇列到迴圈佇列
設計的思想:
rear表示當前可以存放的資料元素的下標
front == rear 佇列是空的
浪費乙個空間,如果rear的下乙個是front 就認為是滿的
出佇列就是front後移
實現中比較難的地方在於怎麼讓rear + 1就到陣列的front 或者 出隊的時候怎麼讓front到front
我們可以這樣:rear = (rear + 1) % length
或者front = (front + 1) % length這樣就完美解決問題
下面是實現**:
class
mycircularqueue
/** insert an element into the circular queue. return true if the operation is successful. */
public
boolean
enqueue
(int value)
this
.elem[rear]
= value;
this
.rear =
(this
.rear +1)
%this
.elem.length;
return
true;}
/** delete an element from the circular queue. return true if the operation is successful. */
public
boolean
dequeue()
this
.front =
(this
.front +1)
%this
.elem.length;
return
true;}
/** get the front item from the queue. */
public
intfront()
return
this
.elem[front];}
/** get the last item from the queue. */
public
intrear()
int rear =
this
.rear ==0?
this
.elem.length -1:
this
.rear -1;
return
this
.elem[rear];}
/** checks whether the circular queue is empty or not. */
public
boolean
isempty()
return
false;}
/** checks whether the circular queue is full or not. */
public
boolean
isfull()
return
false;}
}
實現迴圈佇列
利用陣列實現迴圈佇列,head tail並不能判斷佇列空與滿,需要另外加上乙個輔助 include include includeusing namespace std typedef struct node node define len 20 typedef int elemtype class...
迴圈佇列實現
迴圈佇列就是當資料寫到結尾後,在回到開頭接著寫,該過程類似迴圈鍊錶。如何實現這個到結尾後又轉到開頭呢?很簡單,取模操作!上兩個圖是迴圈佇列的兩種狀態,以下所寫的所有函式都可以對照著這兩幅圖來看。如下 filename buffer.h ifndef buffer h define buffer h ...
迴圈佇列實現
假設是長度為5的陣列,初始狀態,空佇列如所示,front與 rear指標均指向下標為0的位置。然後入隊a1 a2 a3 a4,front指標依然指向下標為0位置,而rear指標指向下標為4的位置。出隊a1 a2,則front指標指向下標為2的位置,rear不變,如下圖所示,再入隊a5,此時front...