#include <stdio.h>
#include <stdlib.h>
int head;//保存队列头位置 ,始终指向最前面的元素
int tail;//保存队列尾位置,始终指向后一个位置
int Queue_Empty()//判断队列是否为空
{
if(head==tail)//队头与队尾相等时,队列为空,删除元素时下溢
return 1;
return 0;
}
int Queue_Full()//判断是否满
{
if((tail+1)%12==head)//队尾+1=队头时,说明队列已满,插入元素会上溢
return 1;
return 0;
}
void EnQueue(int *Q,int x)
{
if(Queue_Full())
printf("栈已满,不能插入新的元素");
else
{
Q[tail]=x;
if(tail==12)//当队列到达数组末尾以后,变为1,实现队列收尾相连
tail=1;
tail++;
}
}
int DeQueue(int *Q)
{
int x=-100;//设置一个默认值,返回-100说明发生下溢
if(Queue_Empty())
printf("队列为空,没有元素可以出队列!\n");
else{
x=Q[head];
if(head==12)//当队列头到达数组末尾,变为1
head=1;
head++;
}
return x;
}
int main(int argc, char *argv[])
{
int Q[13]={0};//其中Q[1]-Q[12]用来保存队列内容
head=tail=1;//初始化队列位置,都放置在队列尾部
int i,x;
for(i=1;i<=12;i++)
{ scanf("%d",&x);
EnQueue(Q,x);
}
printf("\n当前的队头:%d,队尾:%d\n",head,tail);
for(i=1;i<=10;i++)
printf("当前出队列的元素是:%d\n",DeQueue(Q));
scanf("%d",&x);
EnQueue(Q,x);
printf("当前的队头:%d,队尾:%d\n",head,tail);
system("PAUSE");
return 0;
}