Description
实现环形队列(MAXN不超过100001),要求能够进行进队出队操作,参考课本P15页例程。
Input
初始时,队列为空。
第一行有一个整数q,表示操作的个数,接下来的q行里,每行格式如下:
enqueue xxx, 表示把整数xxx进队;
dequeue, 表示出队.
Output
对于每次出队操作,打印出队元素,如出队不成功,打印-1.
Sample Input
3
enqueue 1234567890
dequeue
dequeue
Sample Output
1234567890
-1
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
#define MAXN 100001//最多有100001个元素
static int list[MAXN];
int head=0,tail=0,tag=0;//tag=0标示未满
int enqueue(int x)
{
if(tail==head&&tag==1)
{
return 0; //队满,进队失败,返回0
}
tail=(tail+1)%MAXN;
list[tail]=x;
if(tail==head) tag=1;//进队后再次判断,若慢,则置tag=1
return 0;
}
int dequeue()
{
if(head==tail&&tag==0)
{
return -1; //队空,出队失败,返回-1
}
int value;
head=(head+1)%MAXN;
value=list[head];
if(head==tail) tag=0;//出队后若队空,则置tag=0
return value;//返回要打印的值
}
int main()
{
int q,i,x;
scanf("%d",&q);//操作的个数
for(i=0;i<q;i++)
{
string a;//每次操作,都有一个string输入
cin>>a;
if(a=="enqueue")//若string为进队,则执行enqueue
{
scanf("%d",&x);
enqueue(x);
}
else if(a=="dequeue")//若string为出队,则执行dequeue
{
printf("%d\n",dequeue());
}
}
}