【题目描述】
网页导航拥有后退与前进按钮,一种实现这两个功能的方式是用两个栈:“前进栈”、“后退栈”。
现需要实现以下几个功能:
(1)BACK:如果“后退栈”为空则忽略此命令。 否则将当前两面压入“前进栈”,从“后退栈”中取出栈顶页面,并设置为当前页面;
(2)FORWARD:如果“前进栈”为空则忽略此命令。否则将当前两面压入“后退栈”,从“前进栈”中取出栈顶页面,并设置为当前页面;
(3)VISIT:将当前页面压入“后退栈”、 并将当前页面置为指定页面, 并将“前进栈”置空;
(4)QUIT:退出;
假设初始页面为:http://www.acm.org/。
【输入描述】
输入数据包含一系列命令:BACK、FORWARD、VISIT和QUIT,页面网址为不含空格的字符串。
任一时刻任意时刻两个栈中的元素都不会超过100。
最后一个命令为QUIT。
【输出描述】
对于除QUIT外的所有命令,输出当前网址,如果该命令被忽略则输出“Ignored”。
【样例输入】
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
【样例输出】
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
【数据范围及提示】
对于100%的数据,操作数量不超过1000,每行字符串长度不超过500。
源代码: #include<cstdio> #include<iostream> #include<stack> using namespace std; stack <string> Q1,Q2; int main() //这是我这辈子见过的最恶心的模拟题。 { Q1.push("http://www.acm.org/"); string S,T; while (cin>>S) { if (S[0]=='Q') break; if (S[0]=='V') { cin>>T; cout<<T<<endl; Q1.push(T); while (!Q2.empty()) Q2.pop(); } if (S[0]=='B') { if (Q1.size()>1) { T=Q1.top(); Q2.push(T); Q1.pop(); cout<<Q1.top()<<endl; } else cout<<"Ignored"<<endl; } if (S[0]=='F') { if (!Q2.empty()) { T=Q2.top(); Q1.push(T); Q2.pop(); cout<<T<<endl; } else cout<<"Ignored"<<endl; } } return 0; }