poj 1028 Web Navigation 【模拟题】

题目地址:http://poj.org/problem?id=1028

测试样例:

Sample Input

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

Sample Output

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

题目分析:
指令操作:

需要支持如下命令:

BACK:把当前页面放入“前进栈”的最顶部,并从“后退栈”中取出顶部元素,使其为当前浏览页面。如果“后退栈”为空,则忽略当前操作。

FORWARD:把当前页面放入“后退栈”的最顶部,并从“前进栈”中取出顶部元素,使其为当前浏览页面。如果“前进栈”为空,则忽略当前操作。

VISIT :将当前页面放入后退栈的顶部,并设置URL为当前指定页面。前进栈设置为空。

QUIT:退出浏览器。

假设浏览器初始登入URL网页:http://www.acm.org/

注意:当你BACK 或者 FORWARD 的时候,如果要转换的页面不存在,需要输出Ignored 的时候,不要把当前的页面加入 前进栈 或者 后退栈。

除非要转换的页面存在,才将当前的页面 加入前进栈或者后退栈。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <stack>
#include <queue>
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
    stack<string>s_back; //后退栈
    stack<string>s_forw; //前进栈

    //假设浏览器初始登入URL网页:http://www.acm.org/
    string instruct; //操作指令
    string cur="http://www.acm.org/";//当前开始页面
    string temp;

    while(cin>>instruct )
    {
        if(instruct=="QUIT") break;
        if(instruct=="VISIT") //执行此指令后要将当前页面加入后退栈
        { //遇到访问新的页面  //并且前进栈要清空
            cin>>temp;
            s_back.push(cur); //加入后退栈
            cur=temp;
            cout<<cur<<endl;
            while(!s_forw.empty()) s_forw.pop();
        }
        if(instruct=="BACK")
        {
            if(!s_back.empty()){
                s_forw.push(cur);//将当前页面加入前进栈 注意:要包含在if语句内 否则会错
                cur=s_back.top(); s_back.pop();//不要忘记出栈
                cout<<cur<<endl;
            }
            else printf("Ignored
");
        }
        if(instruct=="FORWARD")
        {
            if(!s_forw.empty()){
                s_back.push(cur); // 注意:要包含在if语句内 否则会错
                cur=s_forw.top(); s_forw.pop();
                cout<<cur<<endl;
            }
            else printf("Ignored
");
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/yspworld/p/4665529.html