网页跳转

题目:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,num = 0;
	string str,web,temp;
	bool flag;
	stack<string> s1,s2;
	cin >> n;
	for(int i = 0;i < n;i++){
		cin >> str;
		flag = true;
		if(str == "VISIT") {
			cin >> web;
			while(!s2.empty()) s2.pop();
			s1.push(web);
		}
		else if(str == "BACK"){
			if(s1.size() <= 1) {cout << "Ignore" << endl;continue;}
			s2.push(s1.top());
			s1.pop();
		}
		else if(str == "FORWARD"){
			if(s2.empty()) {cout << "Ignore" << endl;continue;}
			s1.push(s2.top());
			s2.pop();
		}
		cout << s1.top() << endl;
	} 
	return 0;
}

计蒜客上的题目黏贴不了,大家凑合看一下截图吧…
个人觉得这道题还是不错的,实现BACK和FORWARD这两个操作光靠一个栈可不够,因为一个栈你把网址拿出来之后就再也访问不到之前的了,所以需要用另外一个栈来存放你从第一个栈中拿出的网址。基本思路是这样的,当执行VISIT操作时,你需要把第二个栈全部清空,因为你再也没有FORWARD的可能了,此时再往前肯定是Ignore,因为这是一个新的开始(个人是这么理解的…)。此时你只需要把这个新的网址放到第一个栈中就可以了。当执行”BACK“操作时,你要把第一个栈的栈顶元素拿出放入第二个栈中,如果此时第一个栈只有<=1个元素了,那么你是回不去的。这里肯定有很多人认为为何不是栈为空的时候呢?因为你当前的页面是在这个网址,也就是说此时栈中除了这个网址没有别的多余网址了,你不能再往回了(这里我第一次也写错了)。当执行”FORWARD“操作时你需要把第二个栈的栈顶元素拿出放回第一个栈中,此时Ignore的条件与BACK的不同,需要第二个栈为空才会是Ignore。因为第二个栈保存的是你之前访问过的网页,而不是现在停留的。(这是二者的区别)

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/87448003