队列和栈相互实现

Posted *平芜尽处是春山*

tags:

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

力扣225.用队列实现栈

1、使用一个队列

class MyStack 
    Queue<Integer> queue;

    public MyStack() 
        queue = new LinkedList<Integer>();
    
    
    public void push(int x) 
        int n = queue.size();
        queue.offer(x);
        for (int i = 0; i < n; i++) 
            queue.offer(queue.poll());
        
    

    public int pop() 
        return queue.poll();
    

    public int top() 
        return queue.peek();
    
    
    public boolean empty() 
        return queue.isEmpty();
    

运行截图:

2、使用两个队列

public class MyStack 
    private Queue<Integer> queue1=new LinkedList<>();
    private Queue<Integer> queue2=new LinkedList<>();

    public void push(int x) 
        queue2.offer(x);
        while(! queue1.isEmpty())
            queue2.offer(queue1.poll());
        
        Queue<Integer> tmp=queue1;
        queue1=queue2;
        queue2=tmp;
    

    public int pop() 
        return  queue1.poll();
    

    public int top() 
        return queue1.peek();
    

    public boolean empty() 
        return queue1.isEmpty();
    

运行截图:

力扣232.用栈实现队列(使用两个栈)

public class MyQueue 
    private Stack<Integer> s1;
    private Stack<Integer> s2;
    public MyQueue()
        s1=new Stack<>();
        s2=new Stack<>();
    
    public void push(int x)
        if(s1.isEmpty())
            s1.push(x);
        else
            while(! s1.isEmpty())
                s2.push(s1.pop());
            
            s1.push(x);
            while(! s2.isEmpty())
                s1.push(s2.pop());
            
        
    

    public int pop()
        return s1.pop();
    
    public int peek()
        return s1.peek();
    
    public boolean empty()
        return s1.isEmpty();
    

运行截图:

以上是关于队列和栈相互实现的主要内容,如果未能解决你的问题,请参考以下文章

java 队列和栈相互实现

java实现队列和栈

队列和栈

用数组实现固定长度的队列和栈

Java 集合深入理解 (十三) :ArrayDeque实现原理研究,及动态扩容双端队列和单队列和栈比较

2. 背包,队列和栈