首页 > 其他分享 >Leetcode 225. 用队列实现栈 && 232.用栈实现队列(jvav)

Leetcode 225. 用队列实现栈 && 232.用栈实现队列(jvav)

时间:2024-06-23 19:28:20浏览次数:3  
标签:q1 队列 用栈 && size stack2 public stack1

225. 用队列实现栈

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

        本题可采用一个队列或两个队列完成,这里我使用一个队列实现栈,更加简洁,理解起来也不难。

        栈的特点是先进后出,队列则是先进先出。也就是说要让队列从先进先出转化为先进后出。

要实现这一点,只需让队列先进的元素弹出(除了最后一个元素),再让其添加到该队列中。

        

        如上图所示,将4前面的所有元素弹出再添加到队尾, 就能得到右边栈相同的最外面的元素在最前面。需要注意的是,要想保持队列最后一个元素不动,进入while循环的size 必须为size-1;

        完整代码如下:

class MyStack {
    private Queue<Integer> q1;
  
    
    public MyStack() {
        q1 = new LinkedList<>();
       
    }
    
    public void push(int x) {
        q1.add(x);
        int size = q1.size();
        size--; // 循环前size需减1
        while(size > 0){
            q1.add(q1.remove());
            size--;
        }
        
    }
    
    public int pop() {
        return q1.remove();
    }
    
    public int top() {
        return q1.peek();
    }
    
    public boolean empty() {
        return q1.isEmpty();
    }
}

232.用栈实现队列

        题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty

        要解决此题,需要准备两个栈,stack1 和 stack2 。 为了实现队列里的先进先出,需要将栈出口的方向反过来。如图所示:

原先stack1的出栈顺序是4 3 2 1 ,翻转其出口后,出栈顺序就和队列一样为1 2 3 4。

        若想将出栈口颠倒 , 只需让stack1依次弹出并添加到stack2中。

完整代码如下:


class MyQueue {
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;

    public MyQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }
    
    public void push(int x) {
        stack1.push(x);
    }
    
    public int pop() {
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
    
    public int peek() {
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.peek();
    }
    
    public boolean empty() {
        return stack1.isEmpty() && stack2.isEmpty();
    }
}

标签:q1,队列,用栈,&&,size,stack2,public,stack1
From: https://blog.csdn.net/m0_73904503/article/details/139830811

相关文章

  • 后端开发Spring框架之消息 消息队列案例--订单短信通知
    消息队列案例首先我们书写一个业务层接口定义的是发送消息短信消息处理packagecom.bigdata1421.message.service;publicinterfaceOrderService{voidorder(Stringid);}创建业务层的实现类并且我们要重写方法这里就是打印日志将消息打印在控制台再写......
  • Hyperf redis 异步队列使用
    config/autoload/processes.phpuseApp\Book\Process\CreateQrcodeComsumer;return[Mine\Crontab\MineCrontabProcess::class,Hyperf\AsyncQueue\Process\ConsumerProcess::class,CreateQrcodeComsumer::class//增加自定义的异步队列类];由于hyper......
  • 数据结构历年考研真题对应知识点(栈和队列的应用)
    目录3.3栈和队列的应用3.3.2栈在表达式求值中的应用【中缀表达式转后缀表达式的过程(2012、2014)】【栈的深度分析(2009、2012)】【用栈实现表达式求值的分析(2018)】 3.3.3栈在递归中的应用【栈在函数调用中的作用和工作原理(2015、2017)】3.3.5队列在计算机系统中的......
  • PriorityQueue(优先队列)
    hot100的常用JAVAAPI:PriorityQueue(优先队列)文章目录hot100的常用JAVAAPI:PriorityQueue(优先队列)一、PriorityQueue是什么?二、常用函数1.初始化2.修改变成大顶堆(默认是小顶堆)2.队列中插入元素3.获取元素(最小值或者最大值)4.判断是否包含某个元素、移除指定元素、......
  • 队列:先进先出的数据结构
    1.队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstInFirstOut)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头2.队列的实现队列可以通过多种方式实现,包括数组、链表等。数......
  • Python 全栈系列256 异步任务与队列消息控制(填坑)
    说明每个创新都会伴随着一系列的改变。在使用celery进行异步任务后,产生的一个问题恰好也是因为异步产生的。内容1问题描述我有一个队列stream1,对应的worker1需要周期性的获取数据,对输入的数据进行模式识别后分流。worker1我设施为10秒运行一次。然后我就发现输出......
  • 消息队列(MQ)学习文档
    目录1.简介2.MQ的优势2.1解耦2.2异步2.3消峰3.MQ的劣势3.1系统可用性降低3.2系统复杂度提高4.常见的MQ产品4.1ApacheKafka4.2RabbitMQ4.3ActiveMQ4.4RocketMQ5.MQ的工作模式5.1点对点模式(P2P)5.2发布/订阅模式(Pub/Sub)5.3请求/回复模式(Reques......
  • 优先级队列(堆)的知识点详解
    目录1.优先级队列1.1概念2.优先级队列的模拟实现2.1堆的概念2.2堆的存储方式2.3堆的创建2.3.1堆向下调整2.4堆的插入与删除2.4.1堆的插入2.4.2堆的删除3.常用接口介绍3.1PriorityQueue的特性3.2PriorityQueue常用接口介绍1.优先级队列1.1概念前......
  • 数据结构——队列(Queue)详解
    1.队列(Queue)1.1概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstInFirstOut)的性质入队列:进行插入操作的一端称为队尾(Tail/Rear)出队列:进行删除操作的一端称为队头(Head/Front)2队列的使用在Java中,Queue是个接......
  • 消息队列kafka中间件详解:案例解析(第10天)
    系列文章目录1-消息队列(熟悉)2-Kafka的基本介绍(掌握架构,其他了解)3-Kafka的相关使用(掌握kafka常用shell命令)4-Kafka的PythonAPI的操作(熟悉)文章目录系列文章目录前言一、消息队列(熟悉)1、产生背景2、消息队列介绍2.1常见的消息队列产品2.2应用场景2.3消息队列中两......