问题描述

【问题描述】

浏览器中有三种操作,打开网页、回退和前进,模拟在浏览器中进行了一系列操作,需要输出每次操作后所在页面的网址。

【输入形式】

第一行输入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.1 输入url -> 跳转页面 1.2 状态码 二 实际过程 2.1 输入url - > 解析url(应用层) 2.2 建立连接(传输控制层) 2.3 发送连接数据 ...

  2. Mac连接网线能够接收微信消息,浏览器不能访问网页

    1. 问题 Mac连接网线能够接收微信消息,浏览器不能访问网页. 访问网页,有提示:如下信息,找不到IP地址 2. 解决方法 和其他人的配置进行比较,发现自己的网络设置中,DNS服务器显示的是8.8. ...

  3. 关于goole浏览器无法访问网页问题

    关于goole浏览器无法访问网页问题 前言 有关于google浏览器无法访问百度或任何网页出现下面这种情况: 二.解决步骤(以win10为例) 1:打开控制面板中的"网络和Internet选 ...

  4. IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错

    问题描述:IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错:java.lang.IllegalArgumentException: Invalid character found i ...

  5. Linux的jupyter lab启动,无法从远程的浏览器中访问

    Linux的jupyter lab启动,无法从远程的浏览器中访问 防火墙问题,关闭防火墙 关闭防火墙操作 问题解决! 防火墙问题,关闭防火墙 在网上搜了好长一段时间的解决方案,关于降包的版本都试过了, ...

  6. 使用阿里云对象存储上传图片后,在浏览器中访问返回的url地址,直接提示下载,不是预览

    使用阿里云对象存储上传图片后,在浏览器中访问返回的url地址,直接提示下载,不是预览 不想要的效果: 想要效果: 业务逻辑层就是ServiceImpl层 之前代码: package com.ren.o ...

  7. Windows ❀ 解决Google浏览器无法访问网页问题

    文章目录 问题:Google浏览器无法访问网页 解决方法 问题:Google浏览器无法访问网页 使用Google浏览器打开某个已知安全网页时,弹出如下信息,错误内容如下:NET::ERR_CERT_D ...

  8. 【ThinkPHP系列篇】ThinkPHP框架使网页能够在浏览器中访问(二)

    在第一小节中,我们介绍了Thinkphp的搭建过程,在这一节,分享一下如何让网页模板在thinkphp环境中显示给我们. a) 将网页模板放在View视图中并根据名称分别创建文件夹,分模块建立 比如: ...

  9. 浏览器无法访问网页解决

    原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

最新文章

  1. pyBoard定时器中断中不能够做什么操作? MicroPython,pyBoard
  2. odoo开发笔记:前端显示强制换行
  3. 【CodeForces - 205B 】Little Elephant and Sorting (思维)
  4. 存储如何让文件小一点_如何使用Redis接管文件存储
  5. as3中splice和slice的用法
  6. ThinkPHP文件上传
  7. CUDA——Ubuntu系统上CUDA和cuDNN的安装教程
  8. html 忽略标签属性,限制文本一定数目的字符忽略HTML标签/属性
  9. element ui 菜单封装_vue模块化(echart+element ui)
  10. webpack多环境(dev stg prd qa)打包问题
  11. 基于Vue2.0+Vuex+Axios+NodeJs+Express+MySQL实现京东移动web商城
  12. 【HighCharts系列教程】一、认识Highcharts
  13. 关于oracle端口映射的远程连接
  14. 163邮箱登录界面在哪里?如何登陆163邮箱呢?邮箱163格式怎么写
  15. 【初赛】初赛提纲¿ 错题集
  16. LZJ流体质量计算机价格,LZJ-ⅢC型流体质量计算机
  17. 薛兆丰·北大经济学课
  18. Python-docx库设置word页眉页脚
  19. 苹果手机计算机隐藏应用,操作如此简单 iPhone十大隐藏功能汇总
  20. yolov3运行及保存检测视频(包括摄像头)

热门文章

  1. 蜘蛛侠该怎么做才能救到格温(processing)
  2. win10的远程桌面控制
  3. 844. 比较含退格的字符串
  4. 中国计算机科技前沿网,专委动态科技前沿-中国计算机学会专委.PDF
  5. 黑马程序员---面向对象上(封装,继承,多态)
  6. App Clips简介以及demo演示
  7. Docker+Jenkins+Seneca构建去集中化微服务架构
  8. Vue3计算属性和异步计算属性
  9. 【Fluent】iso-clip、iso-surface和plane-surface的区别,iso-surface如何添加和应用?Error:Surface creation failed错误
  10. 2021-2027全球及中国燃料电池驱动系统行业研究及十四五规划分析报告