由两个栈组成的队列

Posted 牛哄哄的柯南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由两个栈组成的队列相关的知识,希望对你有一定的参考价值。

由两个栈组成的队列

【题目】

​ 编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)。

【思路】

​ 前景知识:栈,先进后出;队列,先进先出

​ 两个栈实现队列,用两个栈就是为了让栈中的数据反转一次,数据如a栈,把a栈的数据都pop出来push到b栈,这样a栈栈底的东西就会到b栈的栈顶了,有两个前提:

  • a栈往b栈压数据时,必须把a栈中数据全部压入b栈
  • 只有b栈为空,才能往b栈压入数据

【代码】

package keafmd.accumulate.codeinterviewguide.twostacksformaqueue;

import java.util.Stack;

/**
 * Keafmd
 *
 * @ClassName: MyStack1
 * @Description: 两个栈实现的队列 add、poll、peek
 * @author: 牛哄哄的柯南
 * @date: 2022-06-21 17:38
 */
public class TwoStacksQueue 
    Stack<Integer> stackA;
    Stack<Integer> stackB;

    public TwoStacksQueue()
        stackA = new Stack<>();
        stackB = new Stack<>();
    

    //转移 a栈的数据全部倒入b栈
    public void transfer()
        if(stackB.isEmpty())
            while(!stackA.isEmpty())
                stackB.push(stackA.pop());
            
        
    

    public void add(Integer val)
        stackA.push(val);
        transfer();
    

    public Integer poll()
        if(stackA.isEmpty()&&stackB.isEmpty())
            throw new RuntimeException("Queue is empty!");
        
        transfer();
        return stackB.pop();
    

    public Integer peek()
        if(stackA.isEmpty()&&stackB.isEmpty())
            throw new RuntimeException("Queue is empty!");
        
        transfer();
        return stackB.peek();
    


以上就是由两个栈组成的队列的全部内容

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/

看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]


加油!

共同努力!

Keafmd

以上是关于由两个栈组成的队列的主要内容,如果未能解决你的问题,请参考以下文章

由两个栈组成的队列

由两个栈组成队列

由两个栈组成的队列

由两个栈组成的队列(C++实现)

两个栈组成的队列

用两个栈实现队列的POP和PUSH操作