题意: 给你一些命令来处理网页,有visit,back,forward,quit。Visit命令就是把当前页压到backward栈中,当前页为visit的网站,并清空forward栈。Back命令是把当前页压到forward栈里,当前页变成backward栈的最上边的网页,并将这个页弹出栈。Forward和back相反,是把当前页压到backward栈里,然后当前页变成forward栈的最上边的网页,并将这个页弹出栈。输出的是执行每条命令的后当前的网页,如果backward或forward栈为空,则输出‘Ingored’。
#include <iostream>
#include <string>
using namespace std;
template<class T>
class stack{
int Top;
T s[150];
public:
stack(){
Top = -1;
}
T top(){
return s[Top];
}
void pop(){
Top -= 1;
}
void push(T a){
s[++Top] = a;
}
bool isampty_back(){
if (Top <= 0) {
return true;
}
return false;
}
bool isampty_forward(){
if (Top < 0) {
return true;
}
return false;
}
void destoery(){
Top = -1;
}
};
int main(){
string s = "http://www.acm.org/";
stack<string> preview;
stack<string> back;
string ans[150];//当前页
int i = 0;
back.push(s);
while (cin>>s) {
if (s == "QUIT") {
break;
}
else if(s == "VISIT"){
preview.destoery();
cin>>s;
back.push(s);
ans[i++] = s;
cout<<ans[i-1]<<endl;
}
else if(s == "BACK"){
if (!back.isampty_back()) {
preview.push(ans[i-1]);
back.pop();
s = back.top();
ans[i++] = s;
cout<<ans[i-1]<<endl;
}
else{
ans[i++] = "Ignored";
cout<<ans[i-1]<<endl;
}
}
else if(s == "FORWARD"){
if (!preview.isampty_forward()) {
s = preview.top();
ans[i++] = s;
cout<<ans[i-1]<<endl;
back.push(s);
preview.pop();
}
else{
ans[i++] = "Ignored";
cout<<ans[i-1]<<endl;
}
}
}
return 0;
}