首页 > 代码库 > 网页导航

网页导航

【题目描述】

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

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

(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;}

网页导航