您的位置:首页 > 其它

ACboy 再次需要你的帮助

2016-04-29 20:26 567 查看
ACboy 再次需要你的帮助

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 169Accepted: 86
Description

对于每一个样例,第一行是N和一个字符串”FIFO”或者”FILO”(FIFO表示先进先出,即队列;FILO表示先进后出,即栈,),N表示命令的个数,下面有N行,每一行表示一个命令。命令分为两种,IN a 表示进去一个a,OUT表示出一个对头元素或者栈顶元素。

Input

第一行是一个数字T,表示样例的个数,对于每一个样例,如题目所述。

Output

对于每一个OUT命令,你要根据”FIFO”和”FILO”单独一行输出一个数字,或者输出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
题目链接:

看灰机


【题目分析】
此题又要用队列,又要用栈,还要用string,好复杂啊,感觉是STL的综合


首先要判断是用队列还是用栈来存储,所以要比较与题目要求的字符串的情况,用 到了string容器的比较函数,然后再判断是输入“IN”还是输出“OUT”,如果输 入就存储下来,输出就判断是否为空,为空输出“None”,不为空就输出栈顶,删除
栈顶或输出队首,删除队尾。

【解题代码】
#include<stack>
#include<queue>
#include<iostream>
#include<string>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int i,a,n;
string s,s1;
stack<int>st;
queue<int>q;
cin>>n>>s;
if(s.compare("FIFO")==0)    // 判断是用栈还是用队列
{
for(i=0;i<n;i++)
{
cin>>s1;
if(s1.compare("IN")==0) // 判断是输入还是输出
{
cin>>a;
q.push(a);          // 插入a
}
else
{
if(q.size()==0)     // 如果队列为空
cout<<"None"<<endl;
else
{
cout<<q.front()<<endl;  // 读取队首元素
q.pop();                // 删除队首元素
}
}
}
}
else                // 如果不是用队列则用栈来做
{
for(i=0;i<n;i++)
{
cin>>s1;
if(s1.compare("IN")==0)     // 判断是否输入
{
cin>>a;
st.push(a);          // 入栈
}
else
{
if(st.size()==0)       // 判断栈是否为空
cout<<"None"<<endl;
else
{
cout<<st.top()<<endl;
st.pop();
}
}
}
}
}
return 0;
}
代码自己打的,应该很复杂,大神可留言指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: