力扣 225题 用队列实现栈 记录

题目描述

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:
你只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。示例:输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

思路

用单个队列实现了栈的行为。栈是一种后入先出(LIFO)的数据结构,通常支持 push、pop、top 和 empty 操作。在这个实现中,通过对队列的操作,模拟了栈的行为。

类定义和构造函数

class MyStack {
public:std::queue<int> que;MyStack() {}

MyStack 类中定义了一个公有成员 que,类型为 std::queue,用于存储栈中的元素。
构造函数 MyStack() 是一个空构造函数,不进行任何操作。队列 que 的初始化由其默认构造函数处理。

push()

    void push(int x) {que.push(x);}

push(int x) 方法直接将元素 x 加入队列的尾部。在栈的行为中,这将是最后一个被弹出的元素,符合后入先出的特性。

pop()

    int pop() {for(int i = 0; i < que.size() - 1; i++){que.push(que.front());que.pop();}int result = que.front();que.pop();return result;}

pop() 方法移除并返回栈顶元素。为了达到这个目的,首先将队列前面的元素(除最后一个元素外)依次出队并重新入队到队列尾部。这样,原本的最后一个元素(栈顶元素)就移到了队列的前端,可以通过 que.pop() 直接移除并返回。
循环 for(int i = 0; i < que.size() - 1; i++) 确保除了最后一个元素,其他所有元素都被重新排列。

top()

    int top() {return que.back();}

top() 方法返回栈顶元素的值,但不移除它。由于队列的 back() 方法可以直接访问队尾元素,这里的队尾元素正是最后入栈的元素,因此可以直接返回。

empty()

    bool empty() {return que.empty();}

empty() 方法检查栈(队列)是否为空。如果队列为空,则栈也为空,返回 true;否则返回 false。

完整代码

#include<stack>
#include<queue>
#include<iostream>class MyStack {
public:std::queue<int> que;MyStack() {}void push(int x) {que.push(x);}int pop() {for(int i = 0; i < que.size() - 1; i++){que.push(que.front());que.pop();}int result = que.front();que.pop();return result;}int top() {return que.back();}bool empty() {return que.empty();}
};int main() {MyStack myStack;myStack.push(1);myStack.push(2);std::cout << "Top: " << myStack.top() << std::endl;  // 返回 2std::cout << "Pop: " << myStack.pop() << std::endl;  // 返回 2std::cout << "Empty: " << (myStack.empty() ? "true" : "false") << std::endl;  // 返回 falsereturn 0;
}

时间复杂度: pop为O(n),其他为O(1)
空间复杂度: O(n)

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

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

相关文章

mysql 表优化

1、检查表空间碎片率的2种方法&#xff1a; 方法一、空间碎片率 frag_pct SELECT table_schema, table_name, concat(round(data_length/1024/1024, 2), MB) as data_length_MB, concat(round(data_free/1024/1024, 2), MB) as data_free_MB,CONCAT(ROUND((data_free / data…

视频翻译英文的软件有哪些?打破语言障碍就用这5个

打算趁着暑假假期悄悄努力惊艳所有人的小伙伴在哪呢~ 相信不少朋友自学都会首选在家看网课&#xff0c;不过有时候面对全英的外语课程&#xff0c;难免总会听得一头雾水~ 但其实这个问题很好解决&#xff01;码好以下这5款视频翻译工具&#xff0c;语言障碍的问题也就都迎刃而…

数论知识(取模运算)

若 a m o d k x a mod kx amodkx&#xff0c;则满足 a m o d ( 2 ∗ k ) x a mo d(2*k)x amod(2∗k)x&#xff0c;或者 a m o d ( 2 k ) x k a mod (2k)xk amod(2k)xk。

数据中台设计书及建设指南(中台及大数据解决技术方案)

1. 中台概念 2. 推动企业组织模式演进 3. 建设方法 4 .中台内容 5. 数据安全体系 中台内容围绕数据中台建设评估、整体框架、数据采集&#xff0c;结构化、半结构化、非结构化的数据采集&#xff0c;数据计算能力、存储计算引擎、数据架构、数据挖掘、各种不同数据层建设、模型…

Redis官方可视化管理工具

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl RedisInsight是一个Redis可视化工具&#xff0c;提供设计、开发和优化 Redis 应用程序的功能。RedisInsight分为免费的社区版和一个付费的企业版&#xff0c;免费版具有基本…

RPA影刀 | 循环 + 嵌套循环 + 循环中的continue和break

一、循环 循环的构成 重复在做的事&#xff08;不变的&#xff09;&#xff1a;循环体每次操作的对象&#xff08;变化的&#xff09;&#xff1a;循环项 二、ForEach列表循环 三、循环相似元素 四、For次数循环 五、嵌套循环 测试目标&#xff1a;遍历所有页面&#xff0…

蓝牙资讯|三星新智能戒指专利曝光,将搭载屏幕显示心率

科技媒体 91Mobile 挖掘美国专利数据库&#xff0c;发现三星获批一项新的设计专利&#xff0c;展示了全新的智能戒指设计方案&#xff0c;未来可能以 Galaxy Ring 2 的名义发布。 根据专利分享的外观设计&#xff0c;采用了有别于 Galaxy Ring 的全圆环设计&#xff0c;专利中智…

如何确保AES加密过程中的数据安全性

在AES加密过程中&#xff0c;确保数据的安全性是至关重要的。以下是一些关键步骤和策略&#xff0c;以确保AES加密的数据安全性&#xff1a; 1. 使用安全的密钥管理 密钥生成&#xff1a;确保密钥是随机生成的&#xff0c;并且具有足够的长度&#xff08;如128位、192位或256…

YOLOv5+DecoupleHead解耦头(YOLOx)

一、解耦头原理 在目标检测中,分类任务和回归任务之间的冲突是一个众所周知的问题。因此,用于分类和定位的解耦头被广泛应用于大多数一级和二级探测器。但是,由于YOLO系列的主干和特征金字塔(如FPN, PAN)不断演化,它们的检测头仍然是耦合的。 从下表可以看出,头耦合时端…

深入探索Python库的奇妙世界:赋能编程的无限可能

在编程的浩瀚宇宙中&#xff0c;Python以其简洁的语法、强大的功能和广泛的应用领域&#xff0c;成为了众多开发者心中的璀璨明星。而Python之所以能够如此耀眼&#xff0c;很大程度上得益于其背后庞大的库生态系统。这些库&#xff0c;如同一块块精心雕琢的积木&#xff0c;让…

音视频开发35 FFmpeg 编码- 将YUV 和 pcm合成一个mp4文件

一 程序的目的 /*** *该程序的目的是: * 将 一个pcm文件 和 一个 yuv文件&#xff0c;合成为一个 0804_out.mp4文件 * pcm文件和yuv文件是从哪里来的呢&#xff1f;是从 sound_in_sync_test.mp4 文件中&#xff0c;使用ffmpeg命令 抽取出来的。 * 这样做的目的是为了对比前…

关于振动盘正反料下料逻辑编写

写在前文 借鉴某个程序的逻辑套路写的 1.就是第一个料是正方向&#xff0c;第二个料是反方向。 (* 基础逻辑应该都差不多&#xff0c;这个是一个振动盘&#xff0c;振动盘的末端是一个上下对射的感应器&#xff0c;这个感应器的作用是对射感应到物料的到位信号&#xff0c;末端…

【解码ChatGPT⑯】深入ChatGPT的热潮:为何我们需要对热门话题保持冷静分析?

2022年11月起&#xff0c;美国OpenAI公司开发的聊天机器人ChatGPT迅速崛起&#xff0c;成为增长最快的消费级应用&#xff0c;引起全球广泛关注。ChatGPT的出现标志着人工智能领域的新纪元&#xff0c;推动全球科技创新的竞争。技术进步引发对应用场景的深度探讨&#xff0c;无…

哪个牌子的护眼大路灯质量好呢?性价比高的五款护眼大路灯分享

护眼大路灯可以说是是每个有娃家庭必不可少的照明神器。但面对市场上琳琅满目的护眼落地灯品牌和型号&#xff0c;很多消费者在选购时都会犯难&#xff1a;究竟哪个牌子的护眼大路灯质量好呢&#xff1f;哪个性价比高呢&#xff1f;本文将根据市场反馈以及性价比等各方面&#…

基于自编码器的时间序列异常检测方法(以传感器数据为例,MATLAB R2021b)

尽管近年来研究者对自编码器及其改进算法进行了深入研究&#xff0c;但现阶段仍存在以下问题亟须解决。 1) 无监督学习模式对特征提取能力的限制与有监督学习相比&#xff0c;无监督学习模式摆脱了对样本标签的依赖、避免了人工标注的困难&#xff0c;但也因此失去了样本标签的…

滑动窗口练习5-水果成篮(字节跳动)

题目链接&#xff1a;**. - 力扣&#xff08;LeetCode&#xff09;** 题目描述&#xff1a; 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水…

java设计模式(八)装饰模式(Decorator Pattern)

1、模式介绍&#xff1a; 装饰模式是一种结构型设计模式&#xff0c;允许你通过将对象放入包含行为的特殊包装对象中来动态地扩展其功能。它提供了一种灵活的方式来添加功能&#xff0c;避免了创建大量子类的问题。 2、应用场景&#xff1a; 动态添加功能&#xff1a;当需要…

spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter

第1坑&#xff1a;配置第三方仓库不生效&#xff0c; 提示在阿里云仓库没有找到 spring-ai-openai-spring-boot-starter 第2坑&#xff1a;升级jdk17后&#xff0c;springboot项目启动报错 Internal error (java.lang.reflect.InaccessibleObjectException): Unable to make pr…

基于CesiumJs的可视化大屏,效果不是一般的震撼。

CesiumJS是一个用于创建三维地理信息系统&#xff08;GIS&#xff09;应用程序的开源JavaScript库。它提供了强大的地理空间数据可视化和交互功能&#xff0c;可以用于构建虚拟地球、地图、飞行模拟等应用。 1. 三维地理空间可视化&#xff1a; CesiumJS支持将地理空间数据以三…

文档更新 |迅为 RK3568开发板驱动指南-第十五/十六篇

《iTOP-RK3568开发板驱动开发指南》更新&#xff0c;本次更新内容对应的是驱动&#xff08;第十五篇 i2C&#xff09;&#xff08;第十六篇 SPI&#xff09;视频&#xff0c;后续资料会不断更新&#xff0c;不断完善&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。…