力扣225 | 两个队列实现栈的思想解析 | 详细图解 Java代码实现

news2024/11/27 1:32:37

做题链接


目录

前言:

一、思想详解

1.push(x)

2.pop() 弹出栈顶元素

3.top() 获取栈顶元素(但不弹出)

4.empty()

二、编程实战

1.Java前置知识

2.代码实现: 


前言:

     栈是一种后进先出数据结构。队列是一种先进先出数据结构。现在用两个队列模拟栈。


一、思想详解

使用两个队列:主要队列 (q1) 和辅助队列 (q2)。

主要队列始终保存栈的最新状态,

而辅助队列用于在 pop 和 top 操作时,暂存节点q1的节点。简而言之,q2用于倒腾节点。

1.push(x)

将元素 x 压入栈顶,只需关注q1。

直接将元素添加到 q1 中即可。

2.pop() 弹出栈顶元素

  1. 将 q1 中的所有元素(除了最后一个)依次移到 q2 中。这样,queue1 中最后一个元素就变成了第一个元素。
  2. 弹出 queue1 中的最后一个元素(即当前栈顶元素)。
  3. 交换 queue1 和 queue2,使 queue2 成为新的 queue1,从而为下一次操作做好准备。

图解:用到辅助队列q2

3.top() 获取栈顶元素(但不弹出)

这个操作与 pop 类似,也要用到辅助队列。只是不删除最后一个元素,而是返回它的值。

  1. 将 queue1 中的所有元素(除了最后一个)依次移到 queue2 中。
  2. 获取 queue1 中的最后一个元素(但不删除)。
  3. 将最后一个元素也移到 queue2 中。
  4. 交换 queue1 和 queue2,使 queue2 成为新的 queue1,从而为下一次操作做好准备。

 图解top():

4.empty()

检查栈是否为空。只需检查 queue1 是否为空即可。


二、编程实战

1.Java前置知识

队列的使用:

在Java中,Queue是个接口,底层是通过链表实现的

import java.util.*;//导入

//定义一个队列
 Queue<Integer> q = new LinkedList<>();

常用方法:


2.代码实现: 

import java.util.*;

class MyStack {

    Queue<Integer> q1;
    Queue<Integer> q2;


    public MyStack() {
       q1=new LinkedList<>();
       q2=new LinkedList<>();
    }
    
    public void push(int x) {
       q1.offer(x);
    }
    
    public int pop() {
        while(q1.size()>1){
            q2.offer(q1.poll());
        }

        int tmp= q1.poll();

        Queue<Integer> tmpQ =q1;
        q1=q2;
        q2=tmpQ;

        return tmp;

    }
    
    public int top() {
        while(q1.size()>1){
            q2.offer(q1.poll());
        }

        int tmp= q1.peek();
        q2.offer(q1.poll());

        Queue<Integer> tmpQ =q1;
        q1=q2;
        q2=tmpQ;

        return tmp;
        
    }
    
    public boolean empty() {
        return q1.isEmpty();
    }
}

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

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

相关文章

学习大数据DAY22 Linux 基 本 指 令 3与 在 Linux 系 统 中 配 置MySQL 和 Oracle

目录 网络配置类 ps 显示系统执行的进程 kill systemctl 服务管理 配置静态 ip 常见错误---虚拟机重启网卡失败或者网卡丢失 mysql 操作 上机练习 6---安装 mysql---参考《mysql 安装》文档 解锁 scott 重启后的步骤 上机练习 7---安装 oracle---参考《oracle 安装》…

redis:清除缓存的最简单命令示例

清除redis缓存命令(执行命令列表见截图) 1.打开cmd窗口&#xff0c;并cd进入redis所在目录 2.登录redis redis-cli 3.查询指定队列当前的记录数 llen 队列名称 4.清除指定队列所有记录 ltrim 队列名称 1 0 5.再次查询&#xff0c;确认队列的记录数是否已清除

使用API Monitor探测C++程序在调用HtmlHelp接口打开.chm文件时传入了哪些参数

目录 1、API Monitor介绍 2、为何要使用API Monitor工具&#xff1f; 2、HtmlHelp函数在API列表函数中找不到&#xff0c;将所在模块作为外部Extern DLL模块添加到API Monitor中 3、开启对Beyond Compare工具软件的实时监测 4、在Beyond Compare软件中打开chm帮助文档&…

MiniExcel:.NET中处理Excel的高效方案

在.NET开发环境中&#xff0c;处理Excel文件是一项常见的任务&#xff0c;无论是数据导入、导出还是报表生成。传统的解决方案可能存在性能瓶颈或功能限制。MiniExcel作为一个现代、高效的库&#xff0c;为.NET开发者提供了一个强大的工具来简化Excel操作。本文将介绍MiniExcel…

【数据结构】排序算法——Lesson2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;数据结构 &#x1f680;本系列文章为个人学…

Scrapy 爬取旅游景点相关数据(四)

本节内容主要为&#xff1a; &#xff08;1&#xff09;创建数据库 &#xff08;2&#xff09;创建数据库表 &#xff08;3&#xff09;爬取数据进MYSQL库 1 新建数据库 使用MYSQL数据库存储数据&#xff0c;创建一个新的数据库 create database scrapy_demo;2 新建数据表 CR…

2024年【非高危行业生产经营单位主要负责人解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力考试报名是安全生产模拟考试一点通生成的&#xff0c;非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力证模拟考试题库…

【Redis宕机啦!】Redis数据恢复策略:RDB vs AOF vs RDB+AOF

文章目录 Redis宕机了&#xff0c;如何恢复数据为什么要做持久化持久化策略RDBredis.conf中配置RDBCopy-On-Write, COW快照的频率如何把握优缺点 AOFAOF日志内容redis.conf中配置AOF写回策略AOF日志重写AOF重写会阻塞吗优缺点 RDB和AOF混合方式总结 Redis宕机了&#xff0c;如何…

C语言图书信息管理系统

题目&#xff1a;图书信息管理系统 内容及主要功能描述&#xff1a; 该系统用于管理图书信息&#xff0c;包括图书的增加、删除、查找、修改、浏览、按出版社统计图书数量等功能。具体功能包括&#xff1a; 增加图书&#xff1a;输入图书信息并添加到系统中。删除图书&#x…

golang设置远程调试

1. 目标机器构建安装dlv https://github.com/go-delve/delve go build之后将编译号的dlv命令路径添加到PATH里 2. 目标机器下载源代码并且运行dlv dlv debug --headless --listen:2345 --api-version2 --accept-multiclient 3.本机添加go remote 4. 设置断点即可

JAVA简介与开发环境配置(基础介绍 一)

目录 Java 简介 主要特性 发展历史 Java开发工具 Java 开发环境配置 window系统安装java 下载JDK 配置环境变量 通过控制台测试JDK是否安装成功 Linux&#xff0c;UNIX&#xff0c;Solaris&#xff0c;FreeBSD环境变量设置 流行JAVA开发工具 使用 Eclipse 运行第一…

C++程序的UI界面闪烁问题的解决办法总结

Windows C++程序复杂的UI界面要使用多种绘图技术(使用GDI、GDI+、ddraw、D3D等绘图),并要贴图去美化,在窗口移动或者改变大小的时候可能会出现闪烁。下面罗列一下UI界面产生闪烁的几种可能的原因,并给出相应的解决办法。 1、原因一 如果熟悉显卡原理的话,调用GDI函数向屏…

Visual Studio2022在屏幕缩放后界面问题的解决方法

Visual Studio2022在屏幕缩放后界面问题的解决方法 最近帮客户修改一个几年前用C#开发的WinForm程序&#xff0c;遇到个奇怪问题&#xff0c;记录一下解决方法。 事情是这样&#xff0c;年初时换了台2K高分屏的开发笔记本&#xff0c;终于淘汰了那台不堪重负的用了五年的Think…

leetcode-98. 验证二叉搜索树

题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&…

mysql报错:Unknown collation: ‘utf8mb4_0900_ai_ci‘的原因及解决方法

参考博客&#xff1a;http://t.csdnimg.cn/NRzyk 报错场景描述 使用navicate在查询中运行sql语句时报错&#xff1a;Unknown collation: utf8mb4_0900_ai_ci 报错原因 生成转储文件的数据库版本为8.0&#xff0c;我本地数据库版本为5.6&#xff0c;高版本导入到低版本&…

国科大作业考试资料《人工智能原理与算法》2024新编-第十三次作业整理

1、假设我们从决策树生成了一个训练集&#xff0c;然后将决策树学习应用于该训练集。当训练集的大小趋于无穷时&#xff0c;学习算法将最终返回正确的决策树吗&#xff1f;为什么是或不是&#xff1f; 本次有两个参考&#xff1a; 参考一&#xff1a; 当训练集的大小趋于无穷…

Spring Bean - xml 配置文件创建对象

类型&#xff1a; 1、值类型 2、null &#xff08;标签&#xff09; 3、特殊符号 &#xff08;< -> < &#xff09; 4、CDATA <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/bea…

**往届快至会后2个月完成检索,刊后1个月完成检索,第四届电子信息工程与计算机科学国际会议(EIECS 2024)火热征稿中!

2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024) 2024 4th International Conference on Electronic Information Engineering and Computer Science 中国延吉 | 2024年9月27-29日 二轮截稿日期&#xff1a;2024年8月9日 收录检索&#xff1a;EI Compendex, Sc…

【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针

目录 常量指针和指向常量的指针有什么区别&#xff1f;1. 指向常量的指针&#xff08;Pointer to Constant&#xff09;声明方式&#xff1a;示例&#xff1a;解释&#xff1a; 2. 常量指针&#xff08;Constant Pointer&#xff09;声明方式&#xff1a;示例&#xff1a;解释&…

AIoTedge边缘物联网平台,开启智能物联新架构

边缘物联网平台是一种将计算能力、数据处理和应用服务部署在网络边缘的解决方案&#xff0c;旨在提高响应速度、降低带宽需求和增强数据安全。根据搜索结果&#xff0c;边缘物联网平台应具备以下功能&#xff1a; 云边协同&#xff1a; 云边一体架构&#xff0c;通过云端管理边…