附加判定標誌的迴圈佇列的基本操作
阿新 • • 發佈:2020-11-18
描述
假設以陣列Q[m]存放迴圈佇列中的元素,同時設定一個標誌tag,以tag==0和tag ==1來區別在隊頭指標(front)和隊尾指標(rear)相等時,佇列狀態為“空”還是“滿”。試編寫與此結構相應的插入(enqueue)和刪除(dlqueue)演算法。
輸入
多組資料,每組資料有兩行。第一行為一個整數n,n表示入隊序列A的長度(n個數依次連續入隊,中間沒有出隊的情況),第二行為序列A(空格分隔的n個整數)。當n=0時,輸入結束。
輸出
對應每組資料輸出一行。依次輸出佇列中所有的整數,每兩個整數之間用空格分隔。
輸入樣例 1
4 1 2 3 4 5 1 2 4 5 3 0
輸出樣例 1
1 2 3 4 1 2 4 5 3
#include <iostream> using namespace std; #define MAXSIZE 100 typedef struct { int *base; int front; int rear; int tag; }SqQueue; int InitQueue(SqQueue &Q) { Q.base=new int[MAXSIZE]; if(!Q.base)return 0; Q.front=Q.rear=0; Q.tag=0; return1; } int EnQueue(SqQueue &Q,int e) { if((Q.tag==1)&&(Q.rear==Q.front)) return 0; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXSIZE; if(Q.tag==0) Q.tag=1; return 1; } int DeQueue(SqQueue &Q,int &e)//& { if(Q.tag==0&&Q.front==Q.rear) return0; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXSIZE; return 1; } int IsEmpty(SqQueue &Q) { if(Q.front==Q.rear) return 0; else return 1; } int main() { int n,m;int a=0,b=0; while(1) { cin>>n;m=n; if(n==0) break; SqQueue Q; InitQueue(Q); while(n!=0) { cin>>a; EnQueue(Q,a); n--; } while(m!=0) { DeQueue(Q,b); cout<<b; if(m!=1)cout<<" "; m--; } cout<<endl; } }