資料結構:迴圈佇列(一)設定一個標誌域後的入佇列和出佇列的演算法
阿新 • • 發佈:2019-01-31
如果希望迴圈佇列中的元素都能得到利用,則需設定一個標誌域tag,並以tag的值為0或1來區分,尾指標和頭指標值相同時的佇列狀態是"空"還是"滿"。試編寫與此結構相應的入佇列和出佇列的演算法。
本題的迴圈佇列CTagQueue的型別定義如下:
本題的迴圈佇列CTagQueue的型別定義如下:
typedef char QElemType;
typedef struct {
QElemType elem[MAXQSIZE];
int tag;
int front;
int rear;
} CTagQueue;
實現函式如下:
Status EnCQueue(CTagQueue &Q, QElemType x) { if(Q.tag)return ERROR; else{ Q.elem[Q.rear] = x;//將e賦值給隊尾 Q.rear = (Q.rear + 1) % MAXQSIZE;//rear指標向後移一個位置,若到最後則轉到陣列頭部 if(Q.rear == Q.front){ Q.tag = 1; //佇列滿 } return OK; } } Status DeCQueue(CTagQueue &Q, QElemType &x) { if(Q.front == Q.rear && Q.tag == 0){ return ERROR; } else{ x = Q.elem[Q.front];//將隊頭元素賦值給e Q.front = (Q.front + 1) % MAXQSIZE;//front指標向後移一個位置,若到最後則轉到陣列頭部 if(Q.front == Q.rear){ Q.tag = 0; //佇列空 } return OK; } }