教你如何用两个队列实现一个栈

一,实现方法

1.具体思路:
1.准备两个队列AB
2.A用来执行入队列(每次入队列时只要放入A即可)
3.出栈操作时,在A中元素保留一个的情况下将A中元素依次入队列B,最后直接让A中的剩下的那一个元素出队列即可,执行完,交换AB队列(方便下次出栈)
4,取栈顶元素操作时,和出栈操作一样,不过访问完A的唯一元素后,再存放到B(保持数据的完整性),最后交换AB即可
2,图示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二,代码实现

public class MyStackByQueue {
    Queue<Integer> A = new LinkedList<>();
    Queue<Integer> B = new LinkedList<>();
    public void push(int val){  //入栈时将数据放入队列A
        A.offer(val);
    }
    public Integer pop(){   //出栈
        if(isEmpty()){   //如果队列为空即返回null
            return null;
        }
        while(A.size() > 1){   //当队列A的元素个数大于一,就将元素挨个出队列A放入队列
            Integer temp = A.poll();
            B.offer(temp);
        }
        //当循环结束时,栈队列A就剩一个元素
        int rec = A.poll();  //保存这个元素,并出队列
        swap(); //交换AB队列,便于下次操作(无论是入栈出栈取栈顶元素都保证了是A中元素往B中倒腾)
        return rec; //返回出栈元素,
    }

    public void swap() {  //交换AB队列
        Queue<Integer> temp = A;
        A = B;
        B = temp;
    }

    public Integer peek(){   //取栈顶元素
        if(isEmpty()){   //如果队列为空即返回null
            return null;
        }
        while(A.size() > 1){   //当队列A的元素个数大于一,就将元素挨个出队列A放入队列
            Integer temp = A.poll();
            B.offer(temp);
        }
        //当循环结束时,栈队列A就剩一个元素
        int rec = A.poll();  //保存这个元素,并出队列
        B.offer(rec); //将这个元素再放入队列B(保持栈的元素完整)
        swap(); //交换AB队列,便于下次操作(无论是入栈出栈取栈顶元素都保证了是A中元素往B中倒腾)
        return rec; //返回出栈元素,
    }
    public boolean isEmpty(){  //判断栈是否为空
        return A.isEmpty() ;  //只要判断A队列是否为空
    }
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值