使用两个栈来实现队列的push和pop操作(Java)

题目分析

栈:基本数据结构,满足先进后出特性。
队列:就像排队一样,先进先出。

思路:根据栈的特性和队列的特性,利用一个栈来保存数据,一个栈来辅助数据的push操作。

代码实现

package stackQueueAlgorithm;

import java.util.Stack;

public class TwoStackToQueue {
    
    
    Stack<Integer> stack1 = new Stack<>();
    Stack<Integer> stack2 = new Stack<>();

    public void  push(Integer node){
    
    
        //stack1作为辅助栈进行入队操作
        //stack2作为主栈用来保存已经入队的数据
        if(stack2.isEmpty()){
    
    
            stack2.push(node);
        }else{
    
    
            //stack2不为空,就将所有的数据依次弹出压入stack1
            while(!stack2.isEmpty()){
    
    
                stack1.push(stack2.pop());
            }
            stack2.push(node);
            //将stack1的数据全部压回来
            while(!stack1.isEmpty()){
    
    
                stack2.push(stack1.pop());
            }
        }

    }

    public int pop(){
    
    
       //出栈弹出stack2栈顶的数据即可
        return stack2.pop();
    }

}

由于Java当中的Stack继承自Vector,而使用的JRT库方法已经对异常和各种条件考虑完全,因此pop方法只需要对栈顶数据进行pop即可。

猜你喜欢

转载自blog.csdn.net/weixin_42643321/article/details/108516977