每日一题《leetcode--1472.设计浏览器历史记录》

https://leetcode.cn/problems/design-browser-history/


 这里我是用双栈实现前进和后退。

#define URL_SIZE 21
#define STACK_SIZE 5000typedef struct {char *BackStack[STACK_SIZE];    //回退栈char *ForwardStack[STACK_SIZE]; //前进栈int BackTop;    //回退栈的栈顶下标int ForwardTop;  //前进栈的栈顶下标
} BrowserHistory;char *CreatUrl(char* url)
{char *ChUrl = (char*)malloc(sizeof(char) * URL_SIZE);strcpy(ChUrl,url);return ChUrl;
}BrowserHistory* browserHistoryCreate(char* homepage) {BrowserHistory* obj = (BrowserHistory*)malloc(sizeof(BrowserHistory));memset(obj, 0, sizeof(BrowserHistory));obj -> BackTop = -1;obj -> ForwardTop = -1;char *ChUrl = CreatUrl(homepage);obj->BackStack[++(obj->BackTop)] = ChUrl;return obj;
}void browserHistoryVisit(BrowserHistory* obj, char* url) {//跳转至urlchar* ChUrl = CreatUrl(url);obj->BackStack[++(obj->BackTop)] = ChUrl;//跳转完成后需要把前进栈中的数据给清空,里面的url不能被访问while(obj->ForwardTop >= 0){free(obj->ForwardStack[obj->ForwardTop]);obj->ForwardStack[obj->ForwardTop] = NULL;obj->ForwardTop--;}}char* browserHistoryBack(BrowserHistory* obj, int steps) {int count = 0;  //记录回退的步数while(count < steps && obj->BackTop > 0){//把回退栈中栈顶的数据放入前进栈中obj->ForwardStack[++(obj->ForwardTop)] = obj->BackStack[obj->BackTop];obj->BackStack[obj->BackTop] = NULL;obj->BackTop--;count++;}return obj->BackStack[obj->BackTop];
}char* browserHistoryForward(BrowserHistory* obj, int steps) {int count = 0;  //记录前进的步数while(count < steps && obj->ForwardTop >= 0){obj->BackStack[++(obj->BackTop)] = obj->ForwardStack[obj->ForwardTop];obj->ForwardStack[obj->ForwardTop] = NULL;obj->ForwardTop--;count++;}return obj->BackStack[obj->BackTop];
}void browserHistoryFree(BrowserHistory* obj) {while(obj->BackTop >= 0){free(obj->BackStack[obj->BackTop]);obj->BackTop--;}while(obj->ForwardTop >= 0){free(obj->ForwardStack[obj->ForwardTop]);obj->ForwardTop--;}free(obj);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubectl 的使用——k8s陈述式资源管理

一、kebuctl简介: kubectl 是官方的CLI命令行工具&#xff0c;用于与 apiserver 进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为 apiserver 能识别的信息&#xff0c;进而实现管理 k8s 各种资源的一种有效途径。 对资源的增、删、查操作比较方便&…

JavaScript表达式语句一

表达式尾部假分号会形成一个表达式语句。默认的独立一行也是一个表达式语句。 语句块是由大括号包含一个或多个语句&#xff0c;形成的代码片段。 条件语句 程序右三种基结构&#xff1a;顺序、选择、循环。条件语句属于选择结构。 if语句 基本语法&#xff1a;if(条件语句…

使用nvm管理nodejs多个版本

在工作中&#xff0c;可能会遇到同时使用vue2和vue3开发项目&#xff0c;但他们的nodejs版本又不同&#xff0c;给你带来了困扰&#xff0c;不知道怎么办&#xff1f;这时就可以使用nvm管理多个nodejs版本 第一步&#xff1a;先去github上面下载nvm 这是下载地址&#xff1a;…

001 mongodb

文章目录 NoSql分类键值(Key-Value)存储数据库列存储数据库文档型数据库图形(Graph)数据库 NoSql的应用场景 MongoDb笛卡尔集mysql与mongodb逻辑结构对比mongodb社区版下载地址windows mongodb7.0配置安装mongoshell下载地址windows下创建名为mongod.cfg的配置文件运行mongodb检…

强化师资,优路教育为职教发展增动力

伴随着科学技术的进步&#xff0c;新兴产业蓬勃发展&#xff0c;在以可持续发展为目标的当下&#xff0c;亟需更多具备扎实有效、强大竞争力的复合型人才投入其中。职业教育作为培养高素质技术技能人才的主要力量之一&#xff0c;是赋能新质生产力发展的关键因素&#xff0c;这…

Fastjson漏洞之CVE-2017-18349

前言&#xff1a; 要想理解漏洞原理&#xff0c;首先看看Fastjson是什么&#xff0c;具体用来做什么才能更好的找到可以利用的场景&#xff1a; Fastjson 是一个由阿里巴巴开发的 Java 语言实现的高性能 JSON 解析器和生成器。它具有以下特点: 快速&#xff1a;Fastjson 在序列…

《我的阿勒泰》读后感

暂没时间写&#xff0c;记录在此&#xff0c;防止忘记&#xff0c;后面补上!!! 【经典语录】 01、如果天气好的话&#xff0c;阳光广阔地照耀着世界&#xff0c;暖洋洋又懒洋洋。这样的阳光下&#xff0c;似乎脚下的每一株草都和我一样&#xff0c;也把身子完全舒展开了。 02、…

OpenHarmony 实战开发——一文总结ACE代码框架

一、前言 ACE_Engine框架是OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;的UI开发框架&#xff0c;为开发者提供在进行应用UI开发时所必需的各种组件&#xff0c;以及定义这些组件的属性、样式、事件及方法&#xff0c;通过这些组件可以方便进行OpenHarmo…

输入输出(3)——C++的标准输入流

目录 一、cin 流 二、成员函数 get 获取一个字符 (一)无参数的get函数。 (二)有一个参数的get函数。 (三&#xff09;有3个参数的get函数 (四&#xff09;用成员函数 getline 函数读取一行字符 (五&#xff09;用成员函数 read 读取一串字符 (六&#xff09;istream 类…

代码随想录算法训练营第十七天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

110.平衡二叉树 题目链接&#xff1a;https://leetcode.cn/problems/balanced-binary-tree/ 文档讲解&#xff1a;https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Ug411S7my 思路…

HACL-Net:基于MRI的胎盘植入谱诊断的分层注意力和对比学习网络

文章目录 HACL-Net: Hierarchical Attention and Contrastive Learning Network for MRI-Based Placenta Accreta Spectrum Diagnosis摘要方法实验结果 HACL-Net: Hierarchical Attention and Contrastive Learning Network for MRI-Based Placenta Accreta Spectrum Diagnosis…

NXP i.MX8系列平台开发讲解 - 3.12 Linux 之Audio子系统(一)

专栏文章目录传送门&#xff1a;返回专栏目录 目录 1. Audio 基础介绍 1.1 音频信号 1.2 音频的处理过程 1.3 音频硬件接口 1.3 音频专业术语解释 2. Linux Audio子系统介绍 3. Linux Audio子系统框架 Linux嵌入式系统中的音频子系统扮演着至关重要的角色&#xff0c;它涉…

记录ES7.X更新数据的低级错误

背景&#xff1a;新项目复用之前同事遗留下的方法 问题&#xff1a;ES跨索引更新数据错误 排查&#xff1a;复用同事的方法有问题&#xff0c;他直接使用ES别名更新数据导致&#xff0c;只有一个索引时无问题&#xff0c;当多个索引使用同一别名时会出现异常 解决&#xff1…

爬虫案例-亚马逊反爬流程分析梳理(验证码突破)(x-amz-captcha)

总体概览&#xff1a;核心主要是需要突破该网站的验证码&#xff0c;成功后会返回我们需要的参数后再去请求一个中间页&#xff08;类似在后台注册一个session&#xff09;&#xff0c;最后需要注意一下 IP 是不能随意切换的 主要难点&#xff1a; 1、梳理整体反爬流程 2、验证…

oss对象上传文件设置格式

PostMapping("upload")ApiOperation(value "上传文件")public Result<UploadDTO> upload(RequestParam("file") MultipartFile file) throws Exception {if (file.isEmpty()) {return new Result<UploadDTO>().error(ModuleErrorCo…

哥白尼哨兵系列卫星数据不能下载的解决方法

自2023年1月24日起&#xff0c;一个新的哥白尼数据空间生态系统已经启动&#xff0c;为所有哨兵数据&#xff08;Sentinel-1, Sentinel-2, Sentinel-3 and Sentinel-5P&#xff09;提供可视化和数据处理&#xff0c;地址为&#xff1a;https://dataspace.copernicus.eu/。详细介…

算法刷题笔记 高精度乘法(C++实现)

文章目录 题目描述解题思路解题代码 题目描述 给定两个非负整数&#xff08;不含前导0&#xff09;A和B&#xff0c;请你计算 AB的值。 输入格式 共两行&#xff0c;第一行包含整数 A&#xff0c;第二行包含整数 B。 输出格式 共一行&#xff0c;包含AB的值。 数据范围 …

switchTab不能传递参数

https://blog.csdn.net/zx562602419/article/details/102541196 v-for传递中click传递参数是对象&#xff1a; https://www.jianshu.com/p/56c890b036a5

tcp_tw_recycle慎用,记一次故障引发的教训(lesson)

tcp_tw_recycle 慎用 有一次线上问题&#xff0c;表现为有些设备有时能连上&#xff0c;有时又不行&#xff0c;某些设备又一直能连上。 后来经过长时间跟踪&#xff0c;发现是因为开启了tcp_tw_recycle&#xff0c;导致tcp握手异常。 tcp_tw_recycle 介绍 net.ipv4.tcp_tw_…

world machine学习笔记(3)

打开 可以打开场景设置&#xff0c;项目设置平铺构建设置 场景设置&#xff1a; 输出范围 设置中心点和范围 设置分辨率 项目设置&#xff1a; 设置地图颜色&#xff0c;单位&#xff0c;最高地形高度 点击这个图形进行预览设置 该按钮还有其他的功能 world machine基础流程…