算法训练营第十天 | LeetCode 232 用栈实现队列、LeetCode 225 用队列实现栈

栈的实现有顺序表和链式表两种,也就是数组和链表实现。

其中抽象栈类的私有成员函数有operator=的重载函数和stack的构造函数,为了保护栈的构造和拷贝被保护。公有成员函数有Stack(),~Stack(),clear(),push(),pop(),top()和length(),这些函数中后五种均为虚函数=0,参数和返回值都要加const限定,参数还是引用限定。

具体类的实现就比较简单了,在上述函数的基础上,私有成员函数变成了maxSize,top元素值下标和指向存储数组起始位置的指针,公有成员函数中构造函数将maxSize赋值为参数size,top值置为0,给数组申请size大小的动态空间。虚构函数直接delete该动态空间起始地址即可。clear函数将top直接置为0,push、pop、topValue为数组取值操作,需要加Assert断言判断是否满足条件。由于数组采取下标访问,length函数直接返回top值即可。

链式栈同样继承该抽象类,基本和链表实现差不多,有意思的是这个函数:

b16bfc62a859492ab8246a39de59080e.png

每次申请新的节点的动态空间的时候,将原先它自己的地址作为新节点next指针指向的地址来实现栈,也是蛮有意思的。

队列的抽象类和栈的抽象类基本相同,主要更换的是类名和同类型函数名。

具体类实现之后再说,先看第一题

LeetCode 232 用栈实现队列

这题其实比较简单,定义一个输入栈,一个输出栈,把原先输入进去的数存放在输入栈中,到要使用的时候再把数据全部push到输出栈中,就由原先的后入先出变成先入先出了。只是进阶要求时间复杂度O(1),我其实怎么想都没想出来,因为要进行上述操作一定要循环,我以为循环就不可能是O(1)了,但题解说是均摊O(1),对每个元素要输出的时候就只需要导入元素个数次,所以均摊O(1),感觉确实是这样,但还要好好理解下。

代码如下:

class MyQueue {
private:stack<int> instack;stack<int> outstack;void in2out() {while (!instack.empty()) {outstack.push(instack.top());instack.pop();}}
public:MyQueue() {while (!instack.empty()) instack.pop();while (!outstack.empty()) outstack.pop();}void push(int x) { instack.push(x);}int pop() {if (outstack.empty()) in2out();int ret = outstack.top();outstack.pop();return ret;}int peek() {if (outstack.empty()) in2out();return outstack.top();}bool empty() {return (instack.empty() && outstack.empty());}
};/*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj = new MyQueue();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->peek();* bool param_4 = obj->empty();*/

这题有类设计的感觉了。

队列的实现就比栈要复杂很多,今天有事在身,改天再专门写一篇文章(立个FLAG)来讲这个。

先把第二题给刷了打完卡要紧。

LeetCode 225 用队列实现栈

这题也挺简单,两个队列直接模仿上述解法即可,也比较简单,之前一刷写过了,这里不再赘述。简单说下一个队列的解法:每次要取数的时候,把前n-1个数全部挪到后面即可。所以要用一个变量size记录队列元素个数。代码如下:

class MyStack {queue<int> myque;int size = 0;void adjust() {if (size > 1) {for (int i = 0; i < size - 1; i++) {int temp = myque.front();myque.pop();myque.push(temp);}}}
public:MyStack() {while (!myque.empty()) myque.pop();size = 0;}void push(int x) {myque.push(x);size++;}int pop() {adjust();int ret = myque.front();myque.pop();size--;return ret;}int top() {adjust();int ret = myque.front();myque.pop();myque.push(ret);return ret;}bool empty() {return myque.empty();}
};/*** Your MyStack object will be instantiated and called as such:* MyStack* obj = new MyStack();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->top();* bool param_4 = obj->empty();*/

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

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

相关文章

C++成员函数内联(inline)

内联函数是C为提高程序运行速度所做的一项改进。常规函数和内联函数之间的主要区别不在于编写方式,而在于C编译器如何将它们组合到程序中。 当程序执行函数调用时,系统要为即将调用的函数创建栈空间(栈帧),保存现在正在执行的函数数据(保护现场),传递参数以及控制程序执…

Python的主要应用领域

Python是一种广泛应用的高级编程语言&#xff0c;以其强大的功能和简洁的语法受到开发者的青睐。自1991年首次发布以来&#xff0c;Python的应用范围已经从简单的脚本语言发展到支持多种编程范式&#xff08;包括面向对象、命令式、函数式编程和过程式&#xff09;的全功能语言…

spring bean的生命周期你了解么

Spring Bean的生命周期是指在Spring容器中创建、初始化、使用和销毁Bean实例的整个过程。理解Spring Bean的生命周期对于开发者来说非常重要&#xff0c;因为它涉及到在不同的生命周期阶段执行自定义逻辑的机会。下面是关于Spring Bean生命周期的详细解释&#xff0c;包括各个阶…

修复提高PDF清晰度软件

修复提高PDF清晰度软件 使用python脚本对pdf进行优化&#xff0c;提高pdf清晰度&#xff0c;使文字更加清晰&#xff0c;观感更佳。仅适用黑白扫描版pdf&#xff0c;且文字较为清晰&#xff0c;若字形笔画较模糊会更加模糊。 注意事项 cpu满核极速运行&#xff0c;软件可能卡…

【实时数仓架构】方法论

笔者不是专业的实时数仓架构&#xff0c;这是笔者从其他人经验和网上资料整理而来&#xff0c;仅供参考。写此文章意义&#xff0c;加深对实时数仓理解。 一、实时数仓架构技术演进 1.1 四种架构演进 1&#xff09;离线大数据架构 一种批处理离线数据分析架构&#xff0c;…

【Java从入门到精通】Java 正则表达式

目录 正则表达式实例 &#x1f349;java.util.regex 包 &#x1f349;实例 &#x1f349;捕获组 &#x1f349;实例 &#x1f349;RegexMatches.java 文件代码&#xff1a; &#x1f349;正则表达式语法 &#x1f349;Matcher 类的方法 &#x1f349;索引方法 &#…

[XR806开发板试用] XR806 调用cjson 实现数据序列化

很荣幸获得极术设区提供的这次试用机会&#xff0c;可以接触鸿蒙操作系统。我工作接触最多的是linux 平台的嵌入式ARM平台较多&#xff0c;这次跑了下鸿蒙&#xff0c;也非常有趣。 不过接进年底了&#xff0c;日常大小琐碎事情突然多了起来&#xff0c;测评的比较匆忙&#x…

【工具类安装教程】IDEA Ui设计器JFormDesigner

1、下载插件 File->Settings->Plugins->JFormDesigner 2、注册教程 2.1注册机下载 链接&#xff1a;https://pan.baidu.com/s/1Rb1EMva5HIYbyBcYgCxIsw 提取码&#xff1a;6666 2.2找到目录 1、找到idea目录 2.3进入plugins目录 找到在JFormDesigner文件夹下lib文…

政安晨:【Keras机器学习示例演绎】(二十九)—— 利用卷积 LSTM 进行下一帧视频预测

目录 简介 设置 数据集构建 数据可视化 模型构建 模型训练 帧预测可视化 预测视频 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&…

【R语言】描述性数据分析与数据可视化

我们处理的变量可以分为两类&#xff0c;一类是连续型变量&#xff0c;另一类叫做分类型变量&#xff0c;其中对于连续型变量&#xff0c;如果服从正态分布就用平均值填充NA&#xff0c;不服从正态分布就用中位数填充NA&#xff0c;对于分类型变量&#xff0c;不管是有序的&…

IOS上线操作

1、拥有苹果开发者账号 2、配置证书&#xff0c;进入苹果开发者官网&#xff08;https://developer.apple.com/&#xff09; 3、点击账户&#xff08;account&#xff09;&#xff0c;然后创建一个唯一的标识符 4、点击"Identifiers"&#xff0c;然后点击"&qu…

骑砍MOD天芒传奇-自定义战斗

一.召唤师峡谷 Backspace-切换RTS视角 鼠标右键-前往某地 鼠标滚轮-放大/缩小 B-回城 数字键1-释放技能 二.RTS攻防战 三.自走棋

GEE必须会教程—一文教你华南地区NDVI趋势可视化分析(代码分享)

本期将带来NDVI的变化趋势分析&#xff0c;一个地区究竟是变绿了&#xff0c;还是植被退化了&#xff0c;如何进行量化呢&#xff1f;小编给出了代码&#xff0c;后期将带来详细的解释&#xff0c;大家可以先尝试着分析一下代码。 上代码&#xff01; var regionee.FeatureCo…

RCE学习

从最近的xyctf中&#xff0c;最大的感受就是自己的rce基础并不牢固&#xff0c;所以马上来恶补一下 漏洞成因 php和其他语言有很多能够执行系统命令或执行其他php代码的函数&#xff0c;因为开发者的使用不当&#xff0c;使得用户能够控制传递给执行命令的函数的参数&#xf…

AI图书推荐:用ChatGPT快速创建在线课程

您是否是您领域的专家&#xff0c;拥有丰富的知识和技能可以分享&#xff1f;您是否曾想过创建一个在线课程&#xff0c;但被这个过程吓倒了&#xff1f;那么&#xff0c;是时候把这些担忧放在一边&#xff0c;迈出这一步了&#xff01;有了这本指南和ChatGPT的帮助&#xff0c…

设计模式: 模板模式

目录 一&#xff0c;模板模式 二&#xff0c;特点 三&#xff0c;组成部分 四&#xff0c;实现步骤 五&#xff0c;案例 一&#xff0c;模板模式 模板模式&#xff08;Template Pattern&#xff09;是一种行为型设计模式&#xff0c;它在超类中定义了一个算法的骨架&#…

Node.js -- mongoose

文章目录 1. 介绍2. mongoose 连接数据库3. 插入文件4. 字段类型5. 字段值验证6. 文档处理6.1 删除文档6.2 更新文档6.3 读取文档 7. 条件控制8. 个性化读取9. 代码模块化 1. 介绍 Mongoose是一个对象文档模型库&#xff0c;官网http://www.mongoosejs.net/ 方便使用代码操作mo…

next.js v14 从入门到跑路

用next.js也有几天了&#xff0c;也是这么一个边看边用这么一个状态&#xff0c;现在主要使用app router模式&#xff0c;更新下next.js v14 app router模式方面的姿势吧。 区别于前面的pages router, app router虽然也是根据目录结构来划分路由&#xff0c;但是它不再依赖于使…

【Godot4.2】EasyTreeData通用解析

概述 之前在《【Godot4.2】Tree控件自定义树形数据ETD及其解析》一文中&#xff0c;实现了对带缩进的层级结构文本的解析&#xff0c;并将其用于Tree控件的列表项构造。 不过当时并没有实现专门的类&#xff0c;今天花了一点时间实现了一下。现在可以更方便的构造和解析ETD数…

数据库面试常问

数据定义语言&#xff08;DDL&#xff09;&#xff1a; CREATE TABLE&#xff1a;用于创建数据库表格。例如&#xff1a;CREATE TABLE students (id INT, name VARCHAR(50), age INT);DROP TABLE&#xff1a;用于删除数据库表格。例如&#xff1a;DROP TABLE students;CREATE I…