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\n");

        }

        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\n");

        }

    }

    return 0;

}

 



                            

你可能感兴趣的:(Web)