浏览器中访问网页、回退及前进模拟
问题描述
【问题描述】
浏览器中有三种操作,打开网页、回退和前进,模拟在浏览器中进行了一系列操作,需要输出每次操作后所在页面的网址。
【输入形式】
第一行输入n(n<100),表示要在浏览器中进行的操作次数。
接下来n行,每行输入一个字符串,如果是VISIT,空格后面输入一个不包含空格和换行的网址(网址长度<100),表示在浏览器地址栏中输入要访问的网址;如果是BACK,表示点击了回退按钮;如果是FORWARD,表示点击了前进按钮。
【输出形式】
对于每次操作,如果能正常操作,则输出操作后的网址,否则输出“Ignore”。
【样例输入】
15
VISIT https://www.cslg.edu.cn
VISIT https://cse.cslg.edu.cn
VISIT https://cse.cslg.edu.cn/info/1090/5484.htm
BACK
BACK
BACK
FORWARD
FORWARD
FORWARD
BACK
BACK
VISIT https://news.cslg.edu.cn/index/read/id/95847
FORWARD
BACK
FORWARD
【样例输出】
https://www.cslg.edu.cn
https://cse.cslg.edu.cn
https://cse.cslg.edu.cn/info/1090/5484.htm
https://cse.cslg.edu.cn
https://www.cslg.edu.cn
Ignore
https://cse.cslg.edu.cn
https://cse.cslg.edu.cn/info/1090/5484.htm
Ignore
https://cse.cslg.edu.cn
https://www.cslg.edu.cn
https://news.cslg.edu.cn/index/read/id/95847
Ignore
https://www.cslg.edu.cn
https://news.cslg.edu.cn/index/read/id/95847
【评分标准】需先定义前面练习中对应的堆栈及基本操作,利用堆栈操作完成代码。
解题思路
我们可以利用两个栈来实现网页的跳转,一个栈用来实现网页的回退,另一个栈用来实现网页的前进,注意到只有先访问,才可以执行回退操作,只有回退了,才可以进行前进操作。
程序设计
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define STACK_INT_SIZE 10
#define STACKINCREMENT 5
typedef char* ElemType; //抽象类型应该定义为字符指针,当字符指针指向字符串第一个元素时就可以表示整个字符串
typedef struct Stack{
ElemType *base;
ElemType *top;
int stacksize;
}Stack,*PStack;
int InitStack(PStack S){ //初始化
S->base=(ElemType *)malloc(STACK_INT_SIZE*sizeof(ElemType));
if(!S->base) return 0;
S->top=S->base;
S->stacksize=STACK_INT_SIZE;
return 1;
}
int Empty(PStack S){ //判空
if(S->top==S->base) return 1;
else return 0;
}
int Push(PStack S,ElemType e){ //入栈
if(S->top-S->base>=S->stacksize){
S->base=(ElemType *)realloc(S->base,sizeof(ElemType)*(S->stacksize+STACKINCREMENT));
if(!S->base) return 0;
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*S->top++=e;
return 1;
}
int Pop(PStack S,ElemType *e){ //出栈
if(S->base==S->top) return 0;
--S->top;
*e=*S->top;
return 1;
}
int Get(PStack S,ElemType *e){ //获取栈顶元素
if(S->base==S->top) return 0;
*e=*(S->top-1);
return 1;
}
int OnlyOne(PStack S){ //判断栈中是否只有一个元素
if(S->top-S->base==1) return 1;
else return 0;
}
int Clear(PStack S){ //清空栈
S->top=S->base;
return 1;
}
int main(){
Stack S1,S2;
InitStack(&S1); //回退栈
InitStack(&S2); //前进栈
char in[10]; //要进行的操作,将字符串保存在一个数组中
char page[100]; //输入的网址,保存在一个数组中,通过字符指针可以获取字符串
char *p; //字符指针
int n; //要操作的次数
scanf("%d",&n);
while(n--){
scanf("%s",in); //先输入要进行的操作
if(strcmp(in,"VISIT")==0){ //利用strcmp函数获取输入的是什么操作,这里进行VISIT操作
Clear(&S2); //首先我们要将前进栈清空,因为要前进首先需要回退
scanf("%s",page);
printf("%s\n",page); //打印访问的网址
p=(char *)malloc(sizeof(char)*strlen(page)); //动态分配一个内存给字符指针
strcpy(p,page); //将访问的网址赋值给字符指针
Push(&S1,p); //将访问的网址压入回退的栈中
}else if(strcmp(in,"BACK")==0){ //进行回头操作
if(Empty(&S1)||OnlyOne(&S1)){ //要进行回退,栈中至少要有两个元素
printf("Ignore\n");
}else{
Pop(&S1,&p); //将回退栈中的栈顶元素出栈
Push(&S2,p); //将回退栈中出栈的元素压入前进操作的栈中,用于前进操作
Get(&S1,&p); //获取栈顶元素,打印栈顶元素,即为回退的网址
printf("%s\n",p);
}
}else if(strcmp(in,"FORWARD")==0){ //前进操作
if(Empty(&S2)){ //当前进操作的栈为空时,无法进行前进操作
printf("Ignore\n");
}else{
Pop(&S2,&p); //将前进操作的栈顶元素出栈
Push(&S1,p); //将前进操作的出栈元素压入回退操作的栈中
printf("%s\n",p); //打印前进栈中出栈的元素即为前进的网址
}
}
}
}
浏览器中访问网页、回退及前进模拟相关推荐
- 在浏览器中访问网页的全过程
文章目录 一 表象 1.1 输入url -> 跳转页面 1.2 状态码 二 实际过程 2.1 输入url - > 解析url(应用层) 2.2 建立连接(传输控制层) 2.3 发送连接数据 ...
- Mac连接网线能够接收微信消息,浏览器不能访问网页
1. 问题 Mac连接网线能够接收微信消息,浏览器不能访问网页. 访问网页,有提示:如下信息,找不到IP地址 2. 解决方法 和其他人的配置进行比较,发现自己的网络设置中,DNS服务器显示的是8.8. ...
- 关于goole浏览器无法访问网页问题
关于goole浏览器无法访问网页问题 前言 有关于google浏览器无法访问百度或任何网页出现下面这种情况: 二.解决步骤(以win10为例) 1:打开控制面板中的"网络和Internet选 ...
- IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错
问题描述:IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错:java.lang.IllegalArgumentException: Invalid character found i ...
- Linux的jupyter lab启动,无法从远程的浏览器中访问
Linux的jupyter lab启动,无法从远程的浏览器中访问 防火墙问题,关闭防火墙 关闭防火墙操作 问题解决! 防火墙问题,关闭防火墙 在网上搜了好长一段时间的解决方案,关于降包的版本都试过了, ...
- 使用阿里云对象存储上传图片后,在浏览器中访问返回的url地址,直接提示下载,不是预览
使用阿里云对象存储上传图片后,在浏览器中访问返回的url地址,直接提示下载,不是预览 不想要的效果: 想要效果: 业务逻辑层就是ServiceImpl层 之前代码: package com.ren.o ...
- Windows ❀ 解决Google浏览器无法访问网页问题
文章目录 问题:Google浏览器无法访问网页 解决方法 问题:Google浏览器无法访问网页 使用Google浏览器打开某个已知安全网页时,弹出如下信息,错误内容如下:NET::ERR_CERT_D ...
- 【ThinkPHP系列篇】ThinkPHP框架使网页能够在浏览器中访问(二)
在第一小节中,我们介绍了Thinkphp的搭建过程,在这一节,分享一下如何让网页模板在thinkphp环境中显示给我们. a) 将网页模板放在View视图中并根据名称分别创建文件夹,分模块建立 比如: ...
- 浏览器无法访问网页解决
原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...
最新文章
- pyBoard定时器中断中不能够做什么操作? MicroPython,pyBoard
- odoo开发笔记:前端显示强制换行
- 【CodeForces - 205B 】Little Elephant and Sorting (思维)
- 存储如何让文件小一点_如何使用Redis接管文件存储
- as3中splice和slice的用法
- ThinkPHP文件上传
- CUDA——Ubuntu系统上CUDA和cuDNN的安装教程
- html 忽略标签属性,限制文本一定数目的字符忽略HTML标签/属性
- element ui 菜单封装_vue模块化(echart+element ui)
- webpack多环境(dev stg prd qa)打包问题
- 基于Vue2.0+Vuex+Axios+NodeJs+Express+MySQL实现京东移动web商城
- 【HighCharts系列教程】一、认识Highcharts
- 关于oracle端口映射的远程连接
- 163邮箱登录界面在哪里?如何登陆163邮箱呢?邮箱163格式怎么写
- 【初赛】初赛提纲¿ 错题集
- LZJ流体质量计算机价格,LZJ-ⅢC型流体质量计算机
- 薛兆丰·北大经济学课
- Python-docx库设置word页眉页脚
- 苹果手机计算机隐藏应用,操作如此简单 iPhone十大隐藏功能汇总
- yolov3运行及保存检测视频(包括摄像头)
热门文章
- 蜘蛛侠该怎么做才能救到格温(processing)
- win10的远程桌面控制
- 844. 比较含退格的字符串
- 中国计算机科技前沿网,专委动态科技前沿-中国计算机学会专委.PDF
- 黑马程序员---面向对象上(封装,继承,多态)
- App Clips简介以及demo演示
- Docker+Jenkins+Seneca构建去集中化微服务架构
- Vue3计算属性和异步计算属性
- 【Fluent】iso-clip、iso-surface和plane-surface的区别,iso-surface如何添加和应用?Error:Surface creation failed错误
- 2021-2027全球及中国燃料电池驱动系统行业研究及十四五规划分析报告