#include <iostream>
#include <stdio.h>
#define maxsize 50
using namespace std;
//循环队列
typedef struct{
int data[maxsize];
int front,rear;
}SqQueue;
//初始化
void init(SqQueue &q){
q.front=q.rear=0;
}
//判空
bool isempty(SqQueue &q){
if(q.front==q.rear)
return true;
else
return false;
}
//判满
bool isfull(SqQueue &q){
if((q.rear+1)%maxsize==q.front)
return true;
else
return false;
}
//入队
int enqueue(SqQueue &q,int e){
if(isfull(q))
return 0;
q.data[q.rear]=e;
q.rear=(q.rear+1)%maxsize;
return 1;
}
//出队
int dequeue(SqQueue &q,int *e){
if(q.front==q.rear)
return 0;
*e=q.data[q.front];
//printf("%d 出队!",&e);
q.front=(q.front+1)%maxsize;
return 1;
}
//取队头元素
int gettop(SqQueue &q,int *e){
*e=q.data[q.front];
return *e;
}
//求队列长度
int qlength(SqQueue q){
return (q.rear-q.front+maxsize)%maxsize;
}
//显示
void show(SqQueue &q){
for(int i=q.front;i<q.rear;i++){
printf("%d ",q.data[i]);
}
printf("\n");
}
int main()
{
SqQueue s;
int e;
//初始化队列
init(s);
//入队
for(int i=0;i<5;i++)
enqueue(s,i);
show(s);
//出队
dequeue(s,&e);
show(s);
//取队头元素
int x=gettop(s,&e);
printf("%d\n",x);
int len=qlength(s);
printf("%d ",len);
return 0;
}