网页导航

【题目描述】

网页导航拥有后退与前进按钮,一种实现这两个功能的方式是用两个栈:“前进栈”、“后退栈”。

现需要实现以下几个功能:

(1)BACK:如果“后退栈”为空则忽略此命令。 否则将当前两面压入“前进栈”,从“后退栈”中取出栈顶页面,并设置为当前页面;

(2)FORWARD:如果“前进栈”为空则忽略此命令。否则将当前两面压入“后退栈”,从“前进栈”中取出栈顶页面,并设置为当前页面;

(3)VISIT:将当前页面压入“后退栈”、 并将当前页面置为指定页面, 并将“前进栈”置空;

(4)QUIT:退出;

假设初始页面为:http://www.acm.org/。

【输入描述】

输入数据包含一系列命令:BACK、FORWARD、VISIT和QUIT,页面网址为不含空格的字符串。

任一时刻任意时刻两个栈中的元素都不会超过100。

最后一个命令为QUIT。

【输出描述】

对于除QUIT外的所有命令,输出当前网址,如果该命令被忽略则输出“Ignored”。

【样例输入】

VISIT http://acm.ashland.edu/

VISIT http://acm.baylor.edu/acmicpc/

BACK

BACK

BACK

FORWARD

VISIT http://www.ibm.com/

BACK

BACK

FORWARD

FORWARD

FORWARD

QUIT

【样例输出】

http://acm.ashland.edu/

http://acm.baylor.edu/acmicpc/

http://acm.ashland.edu/

http://www.acm.org/

Ignored

http://acm.ashland.edu/

http://www.ibm.com/

http://acm.ashland.edu/

http://www.acm.org/

http://acm.ashland.edu/

http://www.ibm.com/

Ignored

【数据范围及提示】

对于100%的数据,操作数量不超过1000,每行字符串长度不超过500。

源代码:

#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;
stack <string> Q1,Q2;
int main() //这是我这辈子见过的最恶心的模拟题。
{
    Q1.push("http://www.acm.org/");
    string S,T;
    while (cin>>S)
    {
        if (S[0]=='Q')
          break;
        if (S[0]=='V')
        {
            cin>>T;
            cout<<T<<endl;
            Q1.push(T);
            while (!Q2.empty())
              Q2.pop();
        }
        if (S[0]=='B')
        {
            if (Q1.size()>1)
            {
                T=Q1.top();
                Q2.push(T);
                Q1.pop();
                cout<<Q1.top()<<endl;
            }
            else
              cout<<"Ignored"<<endl;
        }
        if (S[0]=='F')
        {
            if (!Q2.empty())
            {
                T=Q2.top();
                Q1.push(T);
                Q2.pop();
                cout<<T<<endl;
            }
            else
              cout<<"Ignored"<<endl;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Ackermann/p/5929085.html