首页 > 其他分享 >代码随想录第十天 | 232.用栈实现队列, 225. 用队列实现栈

代码随想录第十天 | 232.用栈实现队列, 225. 用队列实现栈

时间:2022-10-21 11:33:58浏览次数:79  
标签:q1 q2 第十天 队列 随想录 int isEmpty public out

第十天 今天开始学习stack相关

232. 用栈实现队列

class MyQueue {
    Stack<Integer> in;
    Stack<Integer> out;
    public MyQueue() {
        in = new Stack<>();
        out = new Stack<>();
    }
    
    public void push(int x) {
        in.push(x);
    }
    
    public int pop() {
        if(out.isEmpty()){
            while(!in.isEmpty()){
                out.push(in.pop());
            }
        }
        return out.pop();
    }
    
    public int peek() {
        if(out.isEmpty()){
            while(!in.isEmpty()){
                out.push(in.pop());
            }

        }
        return out.peek();
    }
    
    public boolean empty() {
        return in.isEmpty()&&out.isEmpty();
    }
}

/**
 * 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();
 * boolean param_4 = obj.empty();
 */

把一个stack里面的东西都从头都push到第二个stack里,这样顺序就保持先进先出了。

 225. 用队列实现栈

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());
            }
            while(q2.size()>0){
                q1.offer(q2.poll());
            }
        
        
        
        return q1.poll();
    }
    
    public int top() {
        
            while(q1.size()>1){
                
                q2.offer(q1.poll());
                
            }
            int tempValue = q1.peek();
            q2.offer(q1.poll());
            
            Queue temp = q1;
            q1 = q2;
            q2 = temp;
            return tempValue;

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

这道题和上道题不一样的地方是,Q2只是一个帮助排列元素顺序的容器,最终元素还需要返回到Q1。

对帮助理解队列和栈的概念很有帮助

标签:q1,q2,第十天,队列,随想录,int,isEmpty,public,out
From: https://www.cnblogs.com/catSoda/p/16812682.html

相关文章

  • 《MiniPRO H750开发指南》第六十三章 UCOSII实验3-消息队列、信号量集和软件定时器
    第六十三章UCOSII实验3-消息队列、信号量集和软件定时器​上一章,我们学习了如何使用UCOSII的信号量和邮箱的使用,本章,我们将学习消息队列、信号量集和软件定时器的使用。​......
  • 代码随想录Day07
    LeetCode344反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数......
  • JavaScript实现数据结构 -- 队列
    队列队列是一个先进先出的数据结构。JS模拟队列虽然JavaScript中没有队列,但是我们可以用数组来实现队列的功能。 //用数组来模拟队列 constqueue=[]; //入队 q......
  • BlockingQueue阻塞队列
    BlockingQueue阻塞队列BlockingQueue的四组API/**BlockQueue的四组API*1.抛出异常*2.有返回值,不抛出异常*3.阻塞等待*4.超时等待*/publicclassBlockQu......
  • 单调队列&单调栈
    队列给你一个左右开口的容器,左进右出,可以知道先进去的一定先出来,所以可以用他的一些性质来实现一些操作,比如bfs就需要用到队列。手写队列比较麻烦,这里贴一下代码自行体会......
  • 单调队列&单调栈
    队列给你一个左右开口的容器,左进右出,可以知道先进去的一定先出来,所以可以用他的一些性质来实现一些操作,比如bfs就需要用到队列。手写队列比较麻烦,这里贴一下代码自行体会......
  • springcloud学习记录day4 -- 消息队列RubbitMQ
    同步通信和异步通信微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。同步通信我们之前学习的Feign调用就属于......
  • 代码随想录算法训练营第八天 | 344.反转字符串 541. 反转字符串II 剑指Offer 05.替
    344.反转字符串对字符串的基本操作。双指针一个指头一个指尾,交换后向中间移动即可。对于考察基本操作的题目,不要使用库函数。交换操作,如果需要自己实现,有两种办法,一是使......
  • Vue—关于响应式(二、异步更新队列原理分析)
    本节需要准备知识点:EventLoop、Promise关于EventLoop介绍参考阮一峰老师的文章:http://www.ruanyifeng.com/blog/2013/10/event_loop.htmlhttps://www.ruanyifeng.com......
  • 代码随想录Day06
    LeetCode383 赎金信.给定一个赎金信(ransom)字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构......