当前位置: 首页 > news >正文

通过队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

队列:先进先出

栈:后进先出

步骤:

1.基本结构的实现:

声明两个队列:qu1 和 qu2(调用java包)

构造方方法的实现:初始化两个队列qu1和qu2(调用LinkedList方法)

class MyStack {public   Queue<Integer> qu1;public   Queue<Integer> qu2;public MyStack() {qu1 = new LinkedList<>();qu2 = new LinkedList<>();}

2. push(入栈)方法的实现:

判断哪个队列不为空,不为空的队列通过offer方法将新元素插入到其中。

如果都为空,那就选择qu1队列进行插入。 (判断队列是否为空调用java包里的isEmpty方法)

具体代码如下:

public void push(int x) {
//判断哪个队列不为空,哪个不为空便插入哪个队列里if(!qu1.isEmpty()){ qu1.offer(x);}else if(!qu2.isEmpty()){qu2.offer(x);}else{qu1.offer(x);}}

3. 出栈(poll)方法的实现

假如qu1中有一组元素:按先进先出顺序插入1 2 3 4, 同时栈是后进后出

实现出栈,即将元素4出栈:

在队列中如何实现?:当qu1不为空时, 将qu1中的size-1 个元素通过队列pop(出队)方法移动到qu2中,结果如下图:

当qu2不为空时,方法一样,同上。

具体代码如下:

public int pop() { //出栈方法的实现if(empty()){return -1;}if(!qu1.isEmpty()){ //队列不为空int size = qu1.size();for(int i=0;i<size-1;i++) //将前size-1个元素尾插到空列表中{qu2.offer(qu1.poll()); //在qu1获取栈顶元素}return qu1.poll(); //返回qu1中仅剩的一个}else{int size = qu2.size();for(int i=0;i<size-1;i++){qu1.offer(qu2.poll());}return qu2.poll();}}

top方法的实现(获取栈顶元素):

  在栈中,要得到的栈顶元素是4,则在两个队列中,

将不为空的队列里的元素全部通过for循环(pop方法),每次循环将栈顶元素赋给新建变量value(队列遵循先进先出),在通过另一个队列的offer方法插入到该空队列里,最后插入的元素即为出栈元素(栈遵循后进后出),返回最后一个元素即可。具体代码如下:

public int top() {if(empty()){ //判断队列是否为空return -1;}if(!qu1.isEmpty()){int size = qu1.size();int val = 0;for(int i=0;i<size;i++){//将不为空的队列元素全部以出栈方式尾插到另一个队列里val = qu1.poll();qu2.offer(val);}return val;}else{
// qu2不为空int size = qu2.size();int val =0;for(int i=0;i<size;i++){val = qu2.poll();qu1.offer(val);}return val;}}

对于栈的判空方法:队列元素不为空。

public boolean empty() {return qu1.isEmpty() && qu2.isEmpty();}

到这里,这个问题已经被解决了,喜欢的老铁来个三连吧!

相关文章:

通过队列实现栈

请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int to…...

Mac下可以平替paste的软件pastemate,在windows上也能用,还可以实现数据多端同步

Mac平台上非常经典的剪贴板管理工具&#xff1a;「Paste」。作为一款功能完善且易用的工具&#xff0c;「Paste」在实际使用中体现出了许多令人欣赏的特点。但是它是一个收费软件&#xff0c;一年至少要24美元. 现有一平替软件pastemate,功能更加丰富,使用更加方便。 下载地址…...

106. 从中序与后序遍历序列构造二叉树

文章目录 106. 从中序与后序遍历序列构造二叉树思路 105. 从前序与中序遍历序列构造二叉树思路 思考 106. 从中序与后序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和postorder&#xff0c;其中 inorder 是二叉树的中序遍历&#xff…...

监控和日志管理:深入了解Nagios、Zabbix和Prometheus

在现代IT运维中&#xff0c;监控和日志管理是确保系统稳定性和性能的关键环节。本文将介绍三种流行的监控工具&#xff1a;Nagios、Zabbix和Prometheus&#xff0c;帮助您了解它们的特点、使用场景以及如何进行基本配置。 一、Nagios Nagios 是一个强大的开源监控系统&#x…...

Win10下载Python:一步步指南

Win10下载Python&#xff1a;一步步指南 在Win10操作系统中下载并安装Python可能是一项挑战性的任务&#xff0c;但是在本文中&#xff0c;我们将向您提供三个不同的方法&#xff0c;以便轻松地完成这项任务。 方法一&#xff1a;使用Microsoft Store Microsoft Store是一个…...

Race Karts Pack 全管线 卡丁车赛车模型素材

是8辆高细节、可定制的赛车,内部有纹理。经过优化,可在手机游戏中使用。Unity车辆系统已实施-准备驾驶。 此套装包含8种不同的车辆,每种车辆有8-10种颜色变化,总共有75种车辆变化! 技术细节: -每辆卡丁车模型使用4种材料(车身、玻璃、车轮和BrakeFlare) 纹理大小: -车…...

C#——switch案例讲解

案例&#xff1a;根据输入的内容判断执行哪一条输出语句 string number txtUserName.Text; switch(number) { case"101":MessageBox.Show("您进入了101房间");break; case"102":MessageBox.Show("您进入了102房间");break; case&quo…...

技术美术一百问(02)

问题 前向渲染和延迟渲染的流程 前向渲染和延迟渲染的区别 G-Buffer是什么 前向渲染和延迟渲染各自擅长的方向总结 GPU pipeline是怎么样的 Tessellation的三个阶段 什么是图形渲染API? 常见的图形渲染API有哪些&#xff1f; 答案 1.前向渲染和延迟渲染的流程 【例图…...

12 函数的应用

函数的应用 一、Shell递归函数 ​ 函数优点&#xff1a; ​ 函数在程序设计中是一个非常重要的概念&#xff0c;它可以将程序划分成一个个功能相对独立的代码块&#xff0c;使代码的模块化更好&#xff0c;结构更加清晰&#xff0c;并可以有效地减少程序的代码量。 ​ 递归…...

鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发

接入手写套件后&#xff0c;可以在应用中创建手写功能界面。界面包括手写画布和笔刷工具栏两部分&#xff0c;手写画布部分支持手写笔和手指的书写效果绘制&#xff0c;笔刷工具栏部分提供多种笔刷和编辑工具&#xff0c;并支持对手写功能进行设置。接入手写套件后将自动开启一…...

基于python+flask+mysql的音频信息隐藏系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

18724 二叉树的遍历运算

### 思路 1. **递归构建树**&#xff1a; - 先序遍历的第一个节点是根节点。 - 在中序遍历中找到根节点的位置&#xff0c;左边部分是左子树&#xff0c;右边部分是右子树。 - 递归构建左子树和右子树。 2. **递归生成后序遍历**&#xff1a; - 递归生成左子树的…...

代理模式简介:静态代理VS与动态代理

代理模式&#xff1a;静态代理VS动态代理 1、定义2、分类2.1 静态代理2.2 动态代理 3、使用场景4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、定义 代理模式是一种设计模式&#xff0c;通过代理对象控制对目标对象的访问。简而…...

使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址

解决方案&#xff1a;使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址 在使用容器化方式注册 XXL-Job 执行器时&#xff0c;由于容器的 IP 地址是动态分配的&#xff0c;可能会导致调度中心无法访问执行器。为了解决这个问题&#xff0c;可以使用 Dockerfile 和…...

Python连接Kafka收发数据等操作

目录 一、Kafka 二、发送端&#xff08;生产者&#xff09; 三、接收端&#xff08;消费者&#xff09; 四、其他操作 一、Kafka Apache Kafka 是一个开源流处理平台&#xff0c;由 LinkedIn 开发&#xff0c;并于 2011 年成为 Apache 软件基金会的一部分。Kafka 广泛用于构…...

MySql在更新操作时引入“两阶段提交”的必要性

日志模块有两个redo log和binlog&#xff0c;redo log 是引擎层的日志&#xff08;负责存储相关的事&#xff09;&#xff0c;binlog是在Server层&#xff0c;主要做MySQL共嗯那个层面的事情。redo log就像一个缓冲区&#xff0c;可以让当更新操作的时候先放redo log中&#xf…...

充气模块方案——无刷充气泵pcba方案

在方案开发中&#xff0c;充气效率是无刷充气泵PCBA方案开发中的关键问题。一般通过优化电路设计和控制算法&#xff0c;可以实现高效的气体压缩和快速的充气效果。另外&#xff0c;选择合理的电机驱动器和传感器等元器件能够提高打气泵的功率和效率&#xff0c;减少充气时间&a…...

[sql-03] 求阅读至少两章的人数

准备数据 CREATE TABLE book_read (bookid varchar(150) NOT NULL COMMENT 书籍ID,username varchar(150) DEFAULT NULL COMMENT 用户名,seq varchar(150) comment 章节ID ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT 用户阅读表insert into book_read values(《太子日子》…...

Linux如何通过链接下载文件

在Linux系统中&#xff0c;你可以通过多种方式通过链接下载文件。这些方式包括使用命令行工具&#xff08;如wget、curl、axel等&#xff09;和图形界面程序&#xff08;如浏览器或文件管理器&#xff09;。以下是几种常用的命令行方法&#xff1a; 1. 使用wget wget是一个非交…...

seL4 IPC(五)

官网链接&#xff1a;link 求解 代码中的很多方法例如这一个教程里面的seL4_GetMR(0)&#xff0c;我在官方给的手册和API中都搜不到&#xff0c;想问一下大家这些大家都是在哪里搜的&#xff01;&#xff01; IPC seL4中的IPC和一般OS中讲的IPC概念相差比较大&#xff0c;根…...

AI 越火,存储越关键:一颗存储藏着设备稳定运行的秘密

很多人看芯片&#xff0c;第一眼喜欢看“大件”。CPU、GPU、主控、屏幕、电池、无线模组&#xff0c;好像这些才是产品的主角。但真正做过硬件的人都知道&#xff1a;一个设备能不能稳定开机&#xff0c;程序能不能快速读取&#xff0c;系统能不能在复杂环境下长期跑得住&#…...

AI Agent在科学研究中的辅助作用

AI Agent在科学研究中的辅助作用 关键词&#xff1a;AI Agent, 科学研究辅助, 自主代理架构, 多模态推理, 文献挖掘, 实验设计, 未来展望 摘要&#xff1a;本文将像给小学生讲魔法实验室故事一样&#xff0c;深入浅出地拆解AI Agent这个“超级科研小助手天团”的核心原理、架构…...

基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

ROFL-Player:终极免费英雄联盟回放播放器解决方案

ROFL-Player&#xff1a;终极免费英雄联盟回放播放器解决方案 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player ROFL-Player是一款专门为《…...

Linux 下用火焰图进行性能分析

软件的性能分析&#xff0c;往往需要查看 CPU 耗时&#xff0c;了解瓶颈在哪里。火焰图 (flame graph) 是性能分析的利器。 1. 火焰图简介 很多人感冒发烧的时候&#xff0c;往往会模仿神农氏尝百草的路子&#xff1a;先尝尝抗病毒的药&#xff0c;再试试抗细菌的药&#xff…...

终极指南:5分钟学会用FanControl免费掌控Windows风扇转速

终极指南&#xff1a;5分钟学会用FanControl免费掌控Windows风扇转速 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

边缘节点就地智能处理方案

边缘节点就地智能处理方案 第1章项目概述 1.1项目背景 随着数字中国建设迈入深度落地与规模化赋能的全新阶段,2026年作为国家数据要素价值释放关键年、算力网络规模化落地之年以及“十五五”规划开局之年,全国各行业数字化、数智化转型正式从信息化补短板阶段迈入提质增效、深…...

FPGA设计流程全解析:从HDL代码到比特流生成的ISE实战指南

1. 项目概述&#xff1a;从零到一理解FPGA设计核心流程如果你刚接触FPGA&#xff0c;面对一堆开发板、软件和概念&#xff0c;可能会觉得无从下手。我刚开始学的时候也一样&#xff0c;总觉得这东西门槛高&#xff0c;逻辑复杂。但后来我发现&#xff0c;只要把设计流程这条主线…...

如何配置表结构支持读写分离标记_在COMMENT中添加路由规则的架构级应用.txt

...

MegSpot视觉对比工具:3个专业级视觉分析难题的终极解决方案

MegSpot视觉对比工具&#xff1a;3个专业级视觉分析难题的终极解决方案 【免费下载链接】MegSpot MegSpot是一款高效、专业、跨平台的图片&视频对比应用 项目地址: https://gitcode.com/gh_mirrors/me/MegSpot 作为一名视觉内容创作者或质量检测人员&#xff0c;你是…...