Description
给出n次操作与一个容器,容器有两种,一种是FIFO(先进先出),另一种是FILO(先进后出),操作分两种,第一种是IN x表示x进入这个容器,第二种是OUT表示要从容器中拿出元素u,现在对于每次OUT操作,输出拿出的元素,如果容器中没有元素可以拿则输出None
Input
第一行为用例组数T,每组用例第一行为操作数n和容器类型(FIFO/FILO),之后n行每行代表一次操作
Output
对于每次OUT操作,输出从容器中拿出的值,如果容器是空的则输出None
Sample Input
4
4 FIFO
IN 1
IN 2
OUT
OUT
4 FILO
IN 1
IN 2
OUT
OUT
5 FIFO
IN 1
IN 2
OUT
OUT
OUT
5 FILO
IN 1
IN 2
OUT
IN 3
OUT
Sample Output
1
2
2
1
1
2
None
2
3
Solution
栈和队列的入门应用
Code
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
char s[5];
scanf("%d %s",&n,s);
if(s[2]=='F')//队列
{
queue<int>c;
while(n--)
{
scanf("%s",s);
if(s[0]=='I')
{
int temp;
scanf("%d",&temp);
c.push(temp);//进队
}
else if(s[0]=='O')
{
if(!c.empty())//队列非空则拿出队首元素
{
int temp=c.front();
c.pop();
printf("%d\n",temp);
}
else//队列为空
printf("None\n");
}
}
}
else//栈
{
stack<int>c;
while(n--)
{
scanf("%s",s);
if(s[0]=='I')
{
int temp;
scanf("%d",&temp);
c.push(temp);//进栈
}
else if(s[0]=='O')
{
if(!c.empty())//栈非空则拿出栈顶元素
{
int temp=c.top();
c.pop();
printf("%d\n",temp);
}
else//栈为空
printf("None\n");
}
}
}
}
return 0;
}