ACboy 再次需要你的帮助

ACboy 再次需要你的帮助
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 169   Accepted: 86

Description

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

Input

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

Output

对于每一个OUT命令,你要根据”FIFO”和”FILO”单独一行输出一个数字,或者输出None如果没有整数了。

Sample Input

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

None 
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;
}
代码自己打的,应该很复杂,大神可留言指点。


你可能感兴趣的:(ACboy 再次需要你的帮助)