题目大意:模拟一个浏览器,打开一个网页、后退或者前进,输出网址。
解法:用两个堆栈分别表示后退保存的网页和前进保存的网页。初始化时把当前页面压入后退堆栈的栈顶。要注意几点,一个是每次记得要清空两个堆栈,另一个,如果后退之后又打开了新的网页,前进的堆栈要清空,这和真实的浏览器的结果是一致的。
参考代码:
#include<iostream> #include<string> #include<stack> using namespace std; stack<string> back; stack<string> forw; int main(){ int n; cin>>n; while(n--){ string cmd,url="http://www.acm.org/"; while(!back.empty()) back.pop(); while(!forw.empty()) forw.pop(); back.push(url); while(1){ cin>>cmd; if(cmd=="QUIT")break; if(cmd=="VISIT"){ cin>>url; back.push(url); cout<<url<<endl; while(!forw.empty()) //visit new website, empty the forward stack forw.pop(); } if(cmd=="BACK"){ if(back.size()==1) //top url is the current cout<<"Ignored"<<endl; else{ forw.push(url); back.pop(); url=back.top(); cout<<url<<endl; } } if(cmd=="FORWARD"){ if(forw.empty()) cout<<"Ignored"<<endl; else{ url=forw.top(); forw.pop(); back.push(url); cout<<url<<endl; } } } if(n>0) cout<<endl; } return 0; }