//#include <stdio.h>             // c 库
#include <stdlib.h>                //maclloc 库
#include <iostream>                // c++ 库

// 有本句 ,下面cout 前面可以没有  std::
using namespace std;

#define MAXSIZE 4
typedef char   Elem;

typedef struct {
    Elem data[MAXSIZE];
    int f, r;     //定义队首、尾下标,初始均为0,入队r++,出队f++ ,对MAXSIZE取余后在区间(0,MAXSIZE)
}SqQueue;

void InitQ(SqQueue& Q)
{
    Q.f = Q.r = 0;
}
bool EmpQ(SqQueue& Q)
{
    if (Q.f == Q.r)    //初始态或出队完毕
        return 1;
    else
        return 0;
}
bool FullQ(SqQueue& Q)
{
    if (Q.f == (Q.r + 1) % MAXSIZE)    //  
        return 1;
    else
        return 0;
}
void EnQ(SqQueue& Q, Elem x)
{

    if (FullQ(Q))
        cout << endl << "full ! " << endl;
    else
    {
        Q.data[Q.r] = x;
        Q.r = (Q.r + 1) % MAXSIZE;    //先赋值后入队,r指向下次赋值位置
    }


}
Elem  DelQ(SqQueue& Q)
{
    Elem e;

    if (EmpQ(Q))
    {
        cout << endl << " empty !" << endl;
        return 0;
    }

    else
    {
        e = Q.data[Q.f];
        Q.f = (Q.f + 1) % MAXSIZE;
        return e;
    }
}


void main()
{
    Elem e;   //出队列元素
    SqQueue(Q);
    InitQ(Q);

    EnQ(Q, 'a');
    EnQ(Q, 'b');
    EnQ(Q, 'c');
    EnQ(Q, 'd');




    e = DelQ(Q);
    cout << " Del is " << e << endl;  //a

    e = DelQ(Q);
    cout << " Del is " << e << endl; // b 

    e = DelQ(Q);
    cout << " Del is " << e << endl; //c 


    EnQ(Q, 'e');
    EnQ(Q, 'f');



}