栈和队的练习:用两个队列实现栈

题目链接

思路

  • 主要是在出栈和取栈顶元素问题上
  • 只要明确,出栈出的就是队列的队尾元素,所以只要获取到队列的队尾元素即可(如果不理解可以画一个栈和一个队,入相同的元素,可以发现栈顶即是队尾)
  • 取栈顶元素就是取到队列的队尾元素
  • 实现上,我们创建两个队列A,和B。A中始终保存入队的元素。将A中的元素挪到B中,当A中只剩一个元素时,也就是我们想要的队尾,即出栈的元素,也就是栈顶,将其保存返回即可,此时所有的元素在B中,我们再将A,B交换,始终保证A中是存入队的元素。

代码

//用两个队列实现栈
class MyStack {
    private Queue<Integer> A=new LinkedList<>();
    private Queue<Integer> B=new LinkedList<>();
    public MyStack() {

    }

    //入栈
    public void push(int x) {
        A.offer(x);
    }
    //出栈
    //也就是删除队尾元素
    public int pop() {
        if(A.isEmpty()&&B.isEmpty()){
            return 0;
        }
        while(A.size()>1){
            int ret=A.poll();
            B.offer(ret);
        }
        int result=A.poll();
        //再将A和B交换
        Queue<Integer> c=new LinkedList<>();
        c=A;
        A=B;
        B=c;
        return result;
    }

    //取栈顶元素
    //也就是将队尾的元素获取到
    public int top() {
        if(A.isEmpty()&&B.isEmpty()){
            return 0;
        }
        while(A.size()>1){
            int ret=A.poll();
            B.offer(ret);
        }
        int result=A.poll();
        B.offer(result);
        Queue<Integer> c=new LinkedList<>();
        c=A;
        A=B;
        B=c;
        return result;
    }

    //判断栈是否空
    //也就是判断队里面还有没有元素
    public boolean empty() {
        return A.isEmpty();
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值