力扣232:用栈实现队列【java语言实现】

这篇具有很好参考价值的文章主要介绍了力扣232:用栈实现队列【java语言实现】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接:力扣232:用栈实现队列

力扣232:用栈实现队列【java语言实现】,算法题【java版】,leetcode,算法,java

力扣232:用栈实现队列【java语言实现】,算法题【java版】,leetcode,算法,java

        根据题目要求:要用栈实现队列中的相关方法,收先要明确栈和队列的相关特性

栈:   先进后出

队列:先进先出

先让数字1,2,3,4分别依次进入栈和队列中,观察一下:

力扣232:用栈实现队列【java语言实现】,算法题【java版】,leetcode,算法,java

        接下来弹出一个元素:可以看到:队列中弹出的元素是1,栈中弹出的元素是4;不管我们怎么操作用一个栈实现队列的功能是不可能的【首先我们要意识到这个问题】,一个不行,那就用两个栈来实现这个功能,要想弹出元素1,需要依次把栈中的所有元素弹出,放到另一个栈中;如图所示:

力扣232:用栈实现队列【java语言实现】,算法题【java版】,leetcode,算法,java

        此时,我们就会发现队列弹出元素1时,栈1也可以弹出元素1,实现了栈和队列的同步

我们先创建两个栈【我们采用力扣给我们提供的模板:在构造方法中创建两个栈】

要添加元素用栈stackIn;

要弹出元素用栈stackOut;

   //全局变量
     Stack<Integer> stackIn;
     Stack<Integer> stackOut;
     public MyQueue() {
        stackIn = new Stack<>(); // 负责进栈
        stackOut = new Stack<>(); // 负责出栈
    }

先补充一下java中Stack中常用的方法:

  • push(E item):将元素入栈,即将元素放置在栈顶。
  • pop():弹出并返回栈顶的元素。如果栈为空,则抛出EmptyStackException异常。
  • peek():返回栈顶的元素,但不弹出它。如果栈为空,则抛出EmptyStackException异常。
  • empty():测试栈是否为空。

接下来,只需要写一个函数【move()函数】【逻辑是从stackIn栈中依次弹出元素放进satckOut中】,很简单就是一个循环如下:

  //力扣中提供的int pop() 从队列的开头移除并返回元素
    public int pop() {
        //调用方法
        move();  
        //弹出元素     
        return stackOut.pop();
    }

    public void  move(){
        if(!stackOut.isEmpty()){return;}
        while(!stackIn.isEmpty()){
            stackOut.push(stackIn.pop());
        }  
    }

*重点是while循环上面的判断条件:为什么要添加这个判断条件?我们来考虑一下这种情况:

经过添加,删除元素以后,栈和队列中的元素情况如图所示:

力扣232:用栈实现队列【java语言实现】,算法题【java版】,leetcode,算法,java

此时,我们能直接执行while()循环的逻辑【栈不为空,把栈2中的元素添加到栈1中去】吗?

        假设执行上述逻辑后,5进入到栈1;此时,我想弹出一个元素,队列中弹出的是2,而栈中弹出的元素是1,明显是错误的!错误原因就在于:stackOut栈还没有空,就又添加了一个新的元素;因此,要进行逻辑判断:当栈1不为空时,不能添加新元素,逻辑为:

if(!stackOut.isEmpty()){return;}

        还有就是判空的逻辑:根据上述逻辑可知,当两个栈都为空时,我们才能说我们构造的这个队列为空。逻辑为:文章来源地址https://www.toymoban.com/news/detail-830241.html

    public boolean empty() {
        return  stackIn.isEmpty() &&  stackOut.isEmpty(); 
    }

完整代码:

class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;
    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        move();       
        return stackOut.pop();
    }
    
    public int peek() {
       move();
        return stackOut.peek();      
    }
    
    public boolean empty() {
        return  stackIn.isEmpty() &&  stackOut.isEmpty(); 
    }
    public void  move(){
        if(!stackOut.isEmpty()){return;}
        while(!stackIn.isEmpty()){
            stackOut.push(stackIn.pop());
        }  
    }
}

到了这里,关于力扣232:用栈实现队列【java语言实现】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【用队列实现栈】【用栈实现队列】Leetcode 232 225

    ---------------🎈🎈题目链接 用队列实现栈🎈🎈------------------- ---------------🎈🎈题目链接 用栈实现队列🎈🎈-------------------

    2024年01月20日
    浏览(36)
  • 【创作赢红包】LeetCode:232. 用栈实现队列

    🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 题目描述 :请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列

    2023年04月12日
    浏览(34)
  • Day10|LeetCode232.用栈实现队列、LeetCode 225. 用队列实现栈

    栈和队列理论基础: 队列是先进先出,栈是先进后出。如图所示: 栈和队列是STL(C++标准库)里面的两个数据结构。 栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。  栈的内部结构,

    2024年02月14日
    浏览(29)
  • 栈和队列OJ题:LeetCode--232.用栈实现队列

    朋友们、伙计们,我们又见面了,今天给大家带来的是LeetCode--232.用栈实现队列 数 据 结 构 专 栏:数据结构 个    人   主    页 :stackY、 LeetCode 专  栏 :LeetCode刷题训练营 LeetCode--232.用栈实现队列:https://leetcode.cn/problems/implement-queue-using-stacks/ 目录 1.题目介绍 2.实例演示

    2024年02月05日
    浏览(37)
  • LeetCode 232.用栈实现队列(详解) (๑•̌.•๑)

    创建两个栈,一个用于入数据,一个用于出数据。分别是pushST和popST; 1.如果是入数据就直接入进pushST 2.如果是出数据,先检查popST中有无数据,如果有数据,就直接出。如果没数据,就将pushST中的数据放进popST中,再从popST中出数据。 当pushST中的数据入到popST时,数据是顺序的

    2024年01月24日
    浏览(32)
  • Leetcode的AC指南 —— 栈与队列:232.用栈实现队列

    摘要: **Leetcode的AC指南 —— 栈与队列:232.用栈实现队列 **。题目介绍:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int

    2024年01月20日
    浏览(32)
  • 算法第10天|232.用栈实现队列225. 用队列实现栈

    力扣链接 题目描述: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作( push 、 pop 、 peek 、 empty ): 实现  MyQueue  类: void push(int x)  将元素 x 推到队列的末尾 int pop()  从队列的开头移除并返回元素 int peek()  返回队列开头的元素 boolean empty(

    2024年02月22日
    浏览(32)
  • 第10天-代码随想录刷题训练-第五章 栈和队列- ● 理论基础 ● 232.用栈实现队列 ● 225. 用队列实现栈

    栈和队列对应的三个不同的STL版本,底层实现方式不一样, 为我们所知道的是 SGI STL 栈 栈提供 pop和push等接口, 不提供走访功能 也不提供迭代器, 不像map和set可以使用迭代器遍历,往往不被归类为容器,而是容器适配器 栈的内部实现结构可以使用 verctor、list 和 deque(默认)

    2024年02月04日
    浏览(29)
  • (※)力扣刷题-栈和队列-用栈实现队列

    使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 说明: 你只能使用标准的栈操作 – 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。 你所使用

    2024年02月07日
    浏览(30)
  • 数据结构刷题训练:用栈实现队列(力扣OJ)

    目录 前言 1. 题目:用栈实现队列 2. 思路 3. 分析  3.1 定义 “ 队列 ”  3.2 创建队列 3.3 入队  3.4 队头数据  3.5 出队  3.6 判空和销毁 4.题解 总结         栈和队列是数据结构中的两个重要概念,它们在算法和程序设计中都有着广泛的应用。本文将带你深入了解如何使用

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包