前言
简单问题,写的不好,大佬见谅.
如有疏漏,恳请指正,小编垂首.
问题描述:
题目要求:浏览器,一种有三种操作,打开网页、回退和前进。功能如下:
要求:打开一个浏览器后,进行了一系列的操作,需要输出每次操作后所在的页面的网址。
输入格式:第一行输入一个整数n(0—100000),表示操作的次数。接下来n行,每行输入一个字符串,如果为visit,后面接着输入一个不含有空格和换行的网址;如果是back,表示点击了回退按钮;如果是forward,表示点击了后退按钮。
样例输入:对于每次操作,如果能操作成功,输出操作之后的网址,否则输出Ignore,假设输入的所有网址都是合法的。
问题解析:
使用栈来存储网址
实现代码:
代码如下(示例):
#include <iostream>
#include <stack>
#include <string>
using namespace std;
stack<string> s1;//记录访问的页面(为back服务)
stack<string> s2;//记录回退的页面(为forward服务)
int main() {
int n;
cin >> n;
while (n--) {
string str1, str2;
cin >> str1;
if (str1 == "VISIT") {//访问
cin >> str2;
while (!s2.empty()) {//将记录的回退页面清空
s2.pop();
}
s1.push(str2);//入栈
cout << s1.top() << endl;
}
else if (str1 == "BACK") {
if (s1.empty()) {
cout << "Ignore" << endl;
}
else {//回退操作
s2.push(s1.top());//s2存入s1栈顶网址
s1.pop();//s1出栈
if (!s1.empty()) {//输出回退后的网址(同时说明之前出栈的s1.top()是打开页面)
cout << s1.top() << endl;
}
else {
cout << "Ignore" << endl;//回退失败,撤销操作
s1.push(s2.top());//将打开页面从s2中取回到s1
s2.pop();
}
}
}
else if (str1 == "FORWARD") {
if (s2.empty()) {
cout << "Ignore" << endl;
}
else {
cout << s2.top() << endl;//返回上一次回退前的界面
s1.push(s2.top());
s2.pop();
}
}
}
}
注意事项
代码不难,只是比较繁琐,
合理运用调试功能,可以帮助我们整理思路,纵观全局
测试案例:
总结
双栈解决问题