#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define QElemType int
#define MAXQSIZE 6
using namespace std;
typedef struct
{
QElemType *base;
int qFront;
int qRear;
int tag = 0;
} SqQueue;
//初始化
int init_queue(SqQueue &sq)
{
sq.base = (QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
if(!sq.base)
{
exit(OVERFLOW);
}
sq.qFront = sq.qRear = 0;
return OK;
}
//队列长度
int length_queue(SqQueue sq)
{
if(sq.tag == 1)
{
return MAXQSIZE;
}
return (sq.qRear - sq.qFront + MAXQSIZE)%MAXQSIZE;
}
//进队列
int en_queue(SqQueue &sq,QElemType e)
{
if(length_queue(sq)==MAXQSIZE)
{
return ERROR;
}
sq.base[sq.qRear] = e;
sq.qRear = (sq.qRear+1)%MAXQSIZE;
if(sq.qFront == sq.qRear&&sq.tag == 0)
{
sq.tag = 1;
}
return OK;
}
//出队列
int de_queue(SqQueue &sq,QElemType &e)
{
if(length_queue(sq)==0)
{
return ERROR;
}
e = sq.base[sq.qFront];
sq.qFront = (sq.qFront+1)%MAXQSIZE;
sq.tag = 0;
return OK;
}
int main()
{
SqQueue sq;
init_queue(sq);
QElemType e=1;
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
en_queue(sq,e);
cout<<length_queue(sq)<<endl;
QElemType e1 = 0;
de_queue(sq,e1);
cout<<e1<<endl;
cout<<length_queue(sq)<<endl;
}