為了解決順序佇列假溢位的問題,提出了迴圈佇列。使得記憶體的利用率得到了很大的提公升。但是在判斷迴圈佇列空和滿這兩種狀態任然存在問題,因為對於乙個迴圈佇列,不做任何判空和判滿的機制。判空和判滿的條件都是:q->rear == q->front。帶來的問題就是當出現上述條件時不能區分迴圈佇列到底是空還是滿,因此為了解決上述問題。人們提出以下兩種方案來解決:
(1)犧牲乙個位置用作判斷的條件
隊空:q->rear == q->front
隊滿:(q->rear + 1)% n = q->front,其中n為最大佇列容量
(2)設定標誌位來區分隊空和隊滿,這樣就不需要犧牲空間,使得迴圈佇列的空間得到了最大的利用。缺點是需要做很多的邏輯判斷來處理標誌位。
隊空:q->rear == q->front && q->tag == 0
隊滿:q->rear == q->front && q->tag == 1
此外,在標誌位實現迴圈佇列的機制下,需要幾個計數器來統計當前佇列中元素的個數,方便處理q->tag。
**實現:
#include using namespace std;
#define n 5
typedef struct node queue;
int cnt = 0;
bool isempty(queue *q)
bool isfull(queue *q)
void init(queue *q)
void push(queue *q, int x) else
}void pop(queue *q) else
}int front(queue *q) else
}int main() ;
int n = sizeof a/sizeof(int);
queue q;
init(&q);
for (int i=0; iwhile (!isempty(&q))
cout << endl;
return 0;
}
c語言資料結構 用標誌位實現迴圈佇列
1 include2 include3 4 define maxsize 10 定義佇列長度56 static int flag 0 定義標誌位 78 typedef struct sqqueue 建立結構體 1314 int initqueue sqqueue q 22 建立空鍊錶 2324 25...
實現迴圈佇列
利用陣列實現迴圈佇列,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 ...