實現迴圈佇列

2021-10-06 06:15:03 字數 1859 閱讀 1536

可以用乙個陣列來實現乙個佇列,那如果將陣列的尾巴和頭連線起來,是不是構成乙個迴圈佇列了呢

從順序佇列到迴圈佇列

設計的思想:

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...