用栈实现队列

思路:

栈是先进后出,队列是先进先出,所以只靠一个栈是不能实现队列的,但是两个栈就可以,一个栈s1用来模拟入队列,一个栈s2用来出队列,当需要pop和peek时,如果s2为空,则将s1里的元素又放进s2,因为放进s1的时候是先进后出,所以s1放进s2的时候又是后进先出,这样操作,相当于负负得正了,最后s2的栈顶元素,就是最先入s1的元素

class MyQueue {
    Stack<Integer> s1;
    Stack<Integer> s2;
    public MyQueue() {
        s1=new Stack<>();//用来模拟入队列
        s2=new Stack<>();//用来模拟出队列
    }
    public void push(int x) {
        s1.push(x);
    }
    public int pop() {
        if(empty()){//如果模拟队列为空
            return -1;
        }
        if(s2.isEmpty()){//如果s2为空
            int size=s1.size();
            for(int i=0;i<size;i++){
                s2.push(s1.pop());//将s1里面移动过来
            }
        }
        return s2.pop();//出队列
    }
    public int peek() {
        if(empty()){//如果模拟队列为空
            return -1;
        }
        if(s2.isEmpty()){//如果s2为空
            int size=s1.size();
            for(int i=0;i<size;i++){
                s2.push(s1.pop());//将s1里面移动过来
            }
        }
        return s2.peek();//获取队头元素
    }
    public boolean empty() {
        if(s1.isEmpty()&&s2.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值