文章目录
- 一、题目
- 二、系统设计
-
- 2.1 功能模块图
- 2.2 主要功能函数
- 三、问题分析
- 四、实验结果及分析
- 五、源码
- 总结
一、题目 ?模拟浏览器操作程序:标准的Web浏览器具有在最近访问的页面中前后移动的特性。实现这些特性的一种方法是使用两个堆栈来跟踪可以通过前后移动到达的页面。在这个问题中,我们要求实现这一点。
需要支持以下命令:
- BACK:将当前页面压入前向堆栈的顶部;从后向堆栈的顶部弹出该页,使其成为新的当前页。如果后向堆栈为空,则该指令忽略。
- FORWARD:将当前页面压入后向堆栈的顶部;从前向堆栈的顶部弹出该页,使其成为新的当前页。如果前向堆栈为空,则该指令忽略。
- VISIT:将当前页面压入后向堆栈的顶部,将URL指定为新的当前页。前向堆栈被清空。
- QUIT:退出浏览器。
二、系统设计 2.1 功能模块图
文章图片
2.2 主要功能函数
函数名 | 功能 |
---|---|
void visit() | 将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 |
void forward() | 将当前页推进到“后退栈”的顶部。取出“前进栈”中顶端的页面,使它成为当前页。若“前进栈”为空,则忽略。 |
void backk() | 将当前页推进到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”为空,则忽略。 |
- 首先,设置两个堆栈分别为前进栈(forw)和后退栈(back)。将当前页面压入后退栈顶。
- 接着,编写题目要求的四个指令功能函数及主函数。
- VISIT
:输入页面后,将该页面压入后退栈的顶部。当前进栈非空时,将前进栈的元素出栈,,直至前进栈为空。最后,输出当前页面。 - BACK:当后退栈中只有当前页面时,忽略该命令,输出“Igonred”。否则,后退至上一个页面,即将当前页面压入前进栈,将当前后退栈中的栈顶元素(即当前页面)弹出,然后输出后退栈顶元素(为上一个页面)即可。
- FORWARD:当前进栈中只有当前页面时,忽略该命令,输出“Igonred”。否则,前进至下一个页面,即将当前页面压入后退栈,将当前进栈中的栈顶元素(即当前页面)弹出,然后输出前进栈顶元素(为下一个页面)即可。
- QUIT:当输入QUIT指令时,结束循环即可。
- 主函数:声明变量ord,用于输入指令。循环判断输入的指令,根据指令执行不同的功能函数,当输入QUIT指令时结束循环。
文章图片
文章图片
五、源码 main.cpp
#include
#include
#include
using namespace std;
int main()
{
stack> forw;
//前向堆栈
stack> back;
//后向堆栈
back.push("http://www.game.org/");
//back的顶部为当前页面string ord;
//命令
string url;
//网址
while (1)
{
cin >> ord;
if (ord == "VISIT")
{
cin >> url;
back.push(url);
//将输入页面压入后向堆栈的顶部
while (!forw.empty()) //前向堆栈被清空
{
forw.pop();
}
cout << back.top() << endl;
//输出当前页面
}
else if (ord == "BACK")
{
if (back.size() <= 1) //后向堆栈中只有当前页面
{
cout << "Ignored" << endl;
}
else
{
forw.push(back.top());
//当前页面压入前向堆栈顶部
back.pop();
//从后向堆栈弹出
cout << back.top() << endl;
//输出当前页面
}
}
else if (ord == "FORWARD")
{
if (forw.empty()) //前向堆栈为空
{
cout << "Ignored" << endl;
}
else
{
back.push(forw.top());
//当前页面压入后向堆栈顶部
forw.pop();
//从前向堆栈弹出cout << back.top() << endl;
//输出当前页面
}
}
else //QUIT,退出,结束循环
{
break;
}
}return 0;
}
总结 【数据结构|模拟浏览器操作程序(数据结构课设)】此为本人2022年大二下学期数据结构课设中的一道题目。特此记录。
推荐阅读
- 数据结构|背包问题求解(数据结构课设)
- 前端|【毕业季】作为一名大二计科在校生,我有话想说
- javascript|JS数组at函数(获取最后一个元素的方法)介绍
- mysql|Mysql高级学习笔记
- 数据结构|教学计划编制问题(数据结构课程设计)
- Vue基础|Vue的模板语法及案例
- java|刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节
- 高级数据结构
- html|2、HTML基础之列表和样式