数据结构--栈--浏览器前进后退应用

浏览器前进后退:
当你依次浏览a,b,c,然后回到b,再浏览d,就只能查看a,b,d,了。
原理: 利用两个栈A,B

  1. 浏览新网页的时候,压入栈A,清空栈B
  2. 前进,栈A获取栈B的栈顶元素,栈B弹栈,并压入栈A
  3. 后退,栈B获取栈A的栈顶元素,栈A弹栈,并压入栈B

题目:LeetCode 5430. 设计浏览器历史记录(双栈)

browser.h头文件

//
// Created by mingm on 2019/3/31.
//
#ifndef STACK_BROWSER_H
#define STACK_BROWSER_H

#include "stack.cpp"
class Browser
{
private:
    Stack<const char*> forward_stack, back_stack;
    void displayCurWeb(const char *ch)
    {
        cout << "Current web is : " << ch << endl;
    }
public:
    Browser(){}
    ~Browser(){}
    void forward()
    {
        if(!back_stack.Empty())
        {
            forward_stack.Push(back_stack.GetTop()->data);
            back_stack.Pop();
            displayCurWeb(forward_stack.GetTop()->data);
        }
        else
        {
            cout << "can not forward, there is no more page!" << endl;
            displayCurWeb(forward_stack.GetTop()->data);
        }
    }
    void back()
    {
        if(forward_stack.GetLength()>1)
        {
            back_stack.Push(forward_stack.GetTop()->data);
            forward_stack.Pop();
            displayCurWeb(forward_stack.GetTop()->data);
        }
        else
        {
            cout << "can not back, there is no more page! " << endl;
            displayCurWeb(forward_stack.GetTop()->data);
        }
    }
    void browseWeb(const char* ch)
    {
        back_stack.Clear();
        forward_stack.Push(ch);
        displayCurWeb(forward_stack.GetTop()->data);
    }
};
#endif //STACK_BROWSER_H

测试程序 browser_stack_main.cpp

//浏览器前进后退功能,栈实现
// Created by mingm on 2019/3/31.
//
#include "browser.h"
#include <iostream>
using namespace std;

int main()
{
    Browser webBrowser;
    webBrowser.browseWeb("baidu.com");
    webBrowser.browseWeb("google.com");
    webBrowser.browseWeb("163.com");
    cout << "forward..." << endl;
    webBrowser.forward();
    cout << "back..." << endl;
    webBrowser.back();
    cout << "browse mi.com ..." << endl;
    webBrowser.browseWeb("mi.com");
    cout << "forward..." << endl;
    webBrowser.forward();
    cout << "back..." << endl;
    webBrowser.back();
    cout << "back..." << endl;
    webBrowser.back();
    cout << "back..." << endl;
    webBrowser.back();
    cout << "forward..." << endl;
    webBrowser.forward();
}

valgrind测试结果

在这里插入图片描述

  • 27
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael阿明

如果可以,请点赞留言支持我哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值