#include<stdio.h>
typedef int ElemeType;
typedef struct cod
{
ElemeType data[10];
int rare,front;
int MaxSize;
} CirQueue;
CirQueue *InitCQueue() //将队列置为空
{
CirQueue *q=(CirQueue *)malloc(sizeof(struct cod));
q->rare=q->front=0;
q->MaxSize=10;
return q;
}
int EnCqueue(CirQueue *q,ElemeType x) //入队
{
if(((q->rare)+1)%(q->MaxSize)==q->front)//判断队列是否满了
{
printf("The Queue is flow!!!!\n");
return 0;
}
q->data[q->rare]=x;
q->rare=(q->rare+1)%(q->MaxSize);//将对应的下表向后移动
return 1;
}
int DeCqueue(CirQueue *q,ElemeType *x) //出队
{
if(q->rare==q->front) //判断表是否为空
{
printf("\nGame over!!!!!!!!\n");
return 0;
}
*x=q->data[q->front];
q->front=(q->front+1)%(q->MaxSize);//将对应的下表向后移动
return 1;
}
int CQueueLength(CirQueue *q) //计算出当前的元素的个数
{
return (q->rare-q->front+q->MaxSize)%q->MaxSize;
}
void test(CirQueue *q)
{
int key;
while(q->rare!=q->front)
{
DeCqueue(q,&key);
EnCqueue(q,key);
if(q->rare!=q->front)
{
DeCqueue(q,&key);
printf("%d\t",key);
}
}
}
int main()
{
CirQueue *q=InitCQueue();
int count;
int x;
int value;
scanf("%d",&count);//给定要输入的个数
while(count--) //为每一个数进行赋值
{
scanf("%d",&x);
if(EnCqueue(q,x)==0) break;
}
//下面是正常遍历的结果,因为会与后面的生死者游戏冲突所以这里我把它注释掉了
// while(DeCqueue(q,&value)){
// printf("%d\t",value);
// }
//实现12的生死者游戏
test(q);
return 0;
}