對重點的標註都在**中,其中最為重要的內容為:
1.入隊和出隊的操作:(q->front+1)%maxsize
(q->rear+1)%maxsize
2.判滿和判空:
隊滿:
隊空從邏輯上表示兩者均是front= rear;所以為了區別兩者我們需要隊滿的條件設定為:(q->rear+1)%maxsize==q->front
3.隊中 元素個數:(q->rear-q->front+maxsize)%maxsize
注:看圖我們統一方向為:逆時針方向
對於圖一來說:q->front 在 q->rear後面-------------為正常情況
所以 length=q->rear-q-front (元素個數=尾數減頭+1;但是q->front表示的是對頭元素前乙個位置~=自動-1)
對於圖二來說:q->font 在 q->rear 前面---------------為特殊情況
所以此時 :q->front=q.front+maxsize
所以 原始表示式子中 length=q->rear-q-front=q.front+maxsize-q->rear
綜上所述:為了統一我們兩式合併為length=q->rear-q-front=(q->rear-q.front+maxsize)%maxsize;
**如下:
#define maxsize 50
#define elemtype int
#include#include#include//迴圈佇列結點說明
typedef struct sq_queue sqqueue;
//初始化
void initqueue(sqqueue*& q);
//銷毀
void destroyqueue(sqqueue*& q);
//判空
bool queueempty(sqqueue* q);
//進隊
bool enqueue(sqqueue*& q, elemtype e);
//出隊
bool edqueue(sqqueue*& q, elemtype& e);
//隊長度
bool queuelength(sqqueue* q, int& a);
void initqueue(sqqueue*& q)
void destroyqueue(sqqueue*& q)
bool queueempty(sqqueue* q)
bool enqueue(sqqueue*& q, elemtype e)
q->rear = (q->rear + 1) % maxsize;
/* 當佇列中a[maxisze-1]處插完之後,a[0]處為空的話 可以從0開始再插,完美利用空間
*/q->date[q->rear] = e;
return true;
}bool edqueue(sqqueue*& q, elemtype& e)
q->front = (q->front + 1) % maxsize;
/* 當佇列中a[maxisze-1]處插完之後,a[0]處為空的話 可以從0開始再插,完美利用空間
*/e = q->date[q->front];
return true;
}bool queuelength(sqqueue* q, int& a)
a = (q->rear - q->front + maxsize) % maxsize;
/* 正常狀態下 :尾-初
當尾《初時:括號中值為負%操作下是乙個錯誤答案
eg:乙個長度為10的佇列但是有效位置只有8-5則這個佇列的長度為:7
(5-8)=-3%10=-3顯然是錯誤的
(5-8+10)=7%10=7正解
*/return true;
}int main() ;
initqueue(q);
queueempty(q);
int s;
for (s = 0; s <= 3; ++s)
elemtype w;
//edqueue(q, w);
//printf("%d", w);
int i;
queuelength(q, i);
printf("\n%d", i);
return 0;
}
我對JS佇列的學習
佇列是遵循fifo 先進先出 原則的一組有序的項。佇列在尾部新增新元素,並從頂部移除元素。最新新增的元素必須排在佇列的末尾。在具體應用中通常用鍊錶或者陣列來實現。佇列的操作其實是和棧是差不多的,但是佇列只允許新資料在後端進行新增。1 建立佇列 宣告乙個類 function queue 需要乙個用於儲...
資料結構 迴圈佇列的學習
迴圈佇列需要隊首和隊尾兩個標誌位 其中 front 標誌位 位於 隊頭前乙個位置 rear 指向最後乙個元素位置 當 front rear 此時佇列空 當 rear 1 maxsize front 時此時佇列滿 這是犧牲了乙個單元空間的效果 避免假溢位 include using namespace...
對Quene中的佇列的狀態進行操作
檢視佇列的狀態 包括佇列的滿狀態 空 元素個數等等 1 import multiprocessing 23 quene multiprocessing.queue 3 4 quene.put 12 5 quene.put hello 6 quene.put world 78 1.判斷佇列是否是滿狀態...