1117-鸡蛋队列
内存限制:64MB 时间限制:1000ms 特判: No
通过数:34 提交数:60 难度:1
题目描述:
将两根筷子平行的放在一起,就构成了一个队列。将带有编号的鸡蛋放到两根筷子之间叫做入队(push),将筷子之间的鸡蛋拿出来叫做出队(pop)。但这两种方式有特殊的定义,对于入队,只能将鸡蛋从队列的尾部向里放入;对于出队,只能将鸡蛋从队列的头部向外将鸡蛋拿出来。
将①、②入队:
头____________尾 _____________ ______________
← ① ← ② ① ← ② ① ②
______________ _____________ ______________
将①、②出队:
头____________尾 ______________ ______________
← ① ← ② ① ← ② ① ②
______________ ______________ ______________
输入描述:
第一行输入一个数T,表示有T组数据
第二行输入一个数N,表示有N(N<=10)种操作
接下来N行,每行一种操作,push表示将编号为x的鸡蛋放入队列中,pop表示拿走队列头部的一个鸡蛋。
数据输入保证合法,队列中没有鸡蛋时不会有出队操作!
输出描述:
输出N种操作完之后,队列中蛋蛋的编号,如果没蛋了,就输出"no eggs!"(不包括引号)每组输出占一行。
样例输入:
2
3
push 1
push 2
push 3
2
push 1
pop
样例输出:
1 2 3
no eggs!
#include<stdio.h>
#include<string.h>
int main()
{
int a[1005]; //队列
char ch[105];
int number, n;
scanf("%d", &number);
while(number--){
scanf("%d\n", &n);
int i, head, tail; //head 为队列开头, tail为队列结尾
memset(a, 0, sizeof(a)); //初始化数组为0
head=1;
tail=1;
while(n--){
scanf("%s", ch);
if(ch[1]=='u'){
scanf("%d", &a[tail++]); //如果为push,就输入鸡蛋编号
}else if(ch[1]=='o'){
a[head++]=0; //如果为pop, 就删除开头
}
}
if(head==tail){
printf("no eggs!\n"); //如果队列为0, 输出 no egg!
}else{
for(i=head; i<tail-1; i++){ //否则输出鸡蛋编号,注意最后一个数后面无空格
printf("%d ", a[i]);
}
printf("%d\n", a[tail-1]);
}
}
return 0;
}