zoj1061 Web Navigation (栈——基础练习)

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=61


题意:模拟网站前进后退的功能。要有俩个栈——一个是back栈,一个是forward栈。

BACK操作:如果(back栈为空) 输出ignore。否则,把当前网页入forward栈,back栈首出栈,打印当前网页;

FORWARD操作:如果(forward栈为空) 输出ignore。否则,把当前网页入back栈,forward栈首出栈,打印当前网页

VISIT操作:把当前网页入back栈。输入一个网页,使之成为当前网页,清空forward栈。打印当前网页

QUIT操作:退出这次操作。


分析:一共T组数据,每俩组数据输出一行空行。理解后会感觉这题挺基础的,下面看代码:


#include<stdio.h>
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main(){
    int T;
    cin >> T;
    string cur="http://www.acm.org/",ch,v; //cur表示当前网页,ch,v用于输入
    stack<string> b,f;//back、forward栈

    while(T--){
    while(1){
        cin >> ch;//输入命令

        if(ch[0]=='Q'){
            while(!b.empty())//清空back栈
                b.pop();
            while(!f.empty())//清空forward栈
                f.pop();
            cur="http://www.acm.org/";
            if(T!=0)  cout << "\n";
            break;

        }else if(ch[0]=='V'){
            cin >> v;
            b.push(cur);
            cur=v;
            while(!f.empty())//清空forward栈
                f.pop();
            cout << cur <<"\n";

        }else if(ch[0]=='B'){
            if(b.empty()) {printf("Ignored\n");continue;}
            f.push(cur);
            cur=b.top();
            b.pop();
            cout << cur <<"\n";

        }else if(ch[0]=='F'){
            if(f.empty()) {printf("Ignored\n");continue;}
            b.push(cur);
            cur=f.top();
            f.pop();
            cout << cur <<"\n";
        }
    }
    }
    return 0;
}




你可能感兴趣的:(zoj1061 Web Navigation (栈——基础练习))