在用户最近访问的网页中进行“前进”和“后退”是Web浏览器的常用功能,实现该功能的一种方式是使用两个栈(backward 栈和forward栈)来存储用户访问的网址,用户的不同操作对应的具体实现方法如下:

  • 后退(BACK):如果backward栈为空,则该命令被忽略。否则,将当前页面压入forward栈,并从backward栈中弹出一个页面作为当前页面。
  • 前进(FORWARD):如果forward栈为空,则该命令被忽略。否则,将当前页面压入backward栈,并从forward栈中弹出一个页面作为当前页面。
  • 访问某网址(VISIT< URL>):将当前页面压入backward栈,并将此次访问的网页作为当前页面,清空forward栈。

[测试数据]

示例:

假定浏览器的初始页面(首页)为http://csw.jlu.edu.cn/

输入为:

VISIT http://www.jlu.edu.cn/

BACK

BACK
VISIT https://www.google.com/
BACK
FORWARD
VISIT https://www.baidu.com/
BACK
BACK
FORWARD
VISIT https://www.wikipedia.org/
FORWARD
FORWARD
QUIT
如对于上述输入,对应的输出为:http://www.jlu.edu.cn/
http://csw.jlu.edu.cn/
Ignored
https://www.google.com/
http://csw.jlu.edu.cn/
https://www.google.com/
https://www.baidu.com/
https://www.google.com/
http://csw.jlu.edu.cn/
https://www.google.com/
https://www.wikipedia.org/
Ignored
Ignored

实现代码

#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main(){
stack<string> backward,forward;
string now,b,c="csw.jlu.edu.cn";
while(){
cin>>b;
if(b=="VISIT"){
cin>>now;
cout<<now<<endl;
backward.push(c);
while(!forward.empty()){
forward.pop();
}
}
if(b=="BACK"){
if(backward.size()!=){
c=backward.top();
backward.pop();
cout<<c<<endl;
forward.push(now);
now=c;
}
else{
cout<<"Ignored"<<endl;
c="csw.jlu.edu.cn";
}
}
if(b=="FORWARD"){
if(forward.size()!=){
c=forward.top();
forward.pop();
cout<<c<<endl;
backward.push(now);
now=c;
}
else{
cout<<"Ignored"<<endl;
}
}
if(b=="QUIT"){
break;
}
if(b!="VISIT"&&b!="BACK"&&b!="FORWARD"&&b!="QUIT"){
cout<<"输入错误!"<<endl;
}
}
}

C++运用栈实现网络浏览器的“前进”与“后退”功能的更多相关文章

  1. 《数据结构与算法之美》 <06>栈:如何实现浏览器的前进和后退功能?

    浏览器的前进.后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a.当你后退到页面 a,点击前进按钮,就可以重新查看页 ...

  2. 谷歌Chrome浏览器开发者工具的基础功能

    上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工具中最有用的面板Sources.Sources面板几乎是最常用到的Chrome功能面板,也是解决一般问题的主要 ...

  3. 模拟实现兼容低版本IE浏览器的原生bind()函数功能

    模拟实现兼容低版本IE浏览器的原生bind()函数功能: 代码如下: if(!Function.prototype.bind){   Function.prototype.bind=function( ...

  4. 让浏览器支持 jquery ajax load 前进、后退 功能

    BEGIN; 一般在做 ajax load 的时候,非常多人都不会考虑到须要浏览器支持前进后退功能,由于大部分人都不知道能够实现. 近期遇到这个问题,经过一小段研究,发现github已经有现成的开源工 ...

  5. 一个简单的样例看明确怎样利用window.location.hash实现ajax操作时浏览器的前进/后退功能

    我们知道JavaScript中非常早就提供了window.history对象,利用history对象的forward().go().back()方法可以方便实现不同页面之间的前进.后退等这样的导航功能 ...

  6. selenium操作浏览器的前进和后退

    前进关键字:driver.forward() 后退关键字:driver.back() 测试对象:1.https://www.baidu.com/ 2.https://www.sogou.com/ 实例 ...

  7. H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例

    H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例 (转载:https://blog.csdn.net/weixin_38787928/article/details/86741227 ...

  8. 转:HTML5页面如何在手机端浏览器调用相机、相册功能

    HTML5页面如何在手机端浏览器调用相机.相册功能 开发微信端浏览器访问的HTML5的页面,页面中有一个<input id="input" type="file&q ...

  9. zeroclipboard实现多浏览器复制到粘贴板功能

    zeroclipboard实现多浏览器复制到粘贴板功能(单个复制按钮和多个复制按钮) 为了更好的用户体验,现在很多网站中文本框的内容只需要点击复制按钮这样就能把内容复制到粘贴板了:出于兼容性的考虑,基 ...

随机推荐

  1. bzoj1661[Usaco2006 Nov]Big Square 巨大正方形*

    bzoj1661[Usaco2006 Nov]Big Square 巨大正方形 题意: n*n的图中有一些J点,一些B点和一些空白点,问在空白点添加一个J点所能得到的有4个J点组成最大正方形面积.n≤ ...

  2. vpp之clib.h分析

    vpp代码中有一个clib.h,其中封装了很一些很经典的位运算: //计算以2为底的对数,log2(x) //也就是计算2的N次方为x.x为uint32类型 #if defined (count_le ...

  3. Bash 脚本编程

    概述 Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell. shell语法 变量 定义:your_name="hellohhy" 使 ...

  4. CodeForces - 722C Destroying Array (并查集/集合的插入和删除)

    原题链接:https://vjudge.net/problem/511814/origin Description: You are given an array consisting of n no ...

  5. 浅谈Python中的深浅拷贝的区别

    深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...

  6. Oracle11.2安装和完全卸载及卸载后重装等问题

    官网:https://www.oracle.com/index.html 安装: 1.官网下载2.解压到同一个目录(database)3.运行安装4.如果提示系统版本低可在(database\stag ...

  7. vue组件库用markdown生成文档

    前言: 开发vue组件库需要提供组件的使用文档,最好是有渲染到浏览器的demo实例,既能操作又能查看源代码.markdown作为常用的文档编写载体,如果能在里面直接写vue组件,同时编写使用说明就再好 ...

  8. WebView in ScrollView:View not displayed because it is too large to fit into a software layer

    报错信息 W/View: WebView not displayed because it is too large to fit into a software layer (or drawing ...

  9. 编写优美Android注释的常用语法

    编写优美Android注释的常用语法   短期目标是定期能出一篇简文,希望自己能坚持下去~~~~( ̄_, ̄ )   附上Android君 今天要分享的是关于Android注释系统的一些强大功能!! 实 ...

  10. PHP htmlspecialchars_decode() 函数

    实例 把预定义的 HTML 实体 "<"(小于)和 ">"(大于)转换为字符:高佣联盟 www.cgewang.com <?php $str ...