用队列实现栈

该博客介绍了一种使用两个队列实现栈功能的方法。通过入队、出队操作,模拟栈的入栈、出栈和查看栈顶元素。在栈为空时,A队列为空。核心操作包括身份交换AB队列以保持栈特性。

思路:利用两条队列来模拟实现栈的操作

public class Mypork {
    Queue<Integer> A = new LinkedList<>();
    Queue<Integer> B = new LinkedList<>();
    //1入栈
    //入栈和入队列的操作都是一样的,基于链表都是尾插或者头插
    public void push(int x){
        A.offer(x);
    }
    //2.出栈
    public Integer pop(){
        if(A.isEmpty()){
            return null;
        }
        while(A.size()>1){
            B.offer(A.poll());//将A队列中的队尾元素之前的所有元素全部出队列到B队列中
        }
        Integer a = A.poll();//再将队尾元素保存下来
        changeAB();//再交换AB队列的身份,让A队列永远都是保存元素的那条
        return a;
    }
    //3.取栈顶元素
    public Integer peek(){
        if(A.isEmpty()){
            return null;
        }
        while(A.size()>1){
            B.offer(A.poll());
        }
        Integer a = A.poll();
        B.offer(a);;//再将这个栈顶元素还原到原先队列中
        changeAB();
        return a;
    }
    //4.判断栈是否为null
    public boolean empty(){
        return A.isEmpty();
    }
    public void changeAB(){//交换AB的身份
        Queue<Integer> tmp = A;
        A = B;
        B = tmp;
    }
}
    

思路:队列的特性是先进先出,基于链表也就是尾插头删或者头插尾删,而栈的特性是后进先出,基于链表也就是尾插尾删或者头插头删。对于入栈来说和入队列都是一样的,我们假设是尾插;对于队列来说出栈操作相等于是出队列的最后一个元素,把前面的元素全部出队列到B队列中,然后剩下的那个元素就是出栈元素。然后再把AB队列身份交换。取栈顶元素和出栈类似,不过出栈元素需要还原到队列中。A队列为null得时候代表出栈出完了,所以A队列为null就是栈为null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值