1. 程式人生 > 實用技巧 >附加判定標誌的迴圈佇列的基本操作

附加判定標誌的迴圈佇列的基本操作

描述

假設以陣列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;
    return
1; } 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) return
0; 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; } }