栈和队列的相互实现

两个栈实现队列:

一个栈用来入,一个栈用来出

public class StackToQueue<T> {
    private Stack<T> stackin;
    private Stack<T> stackout;
    
    public StackToQueue() {
        stackin = new Stack<T>();
        stackout = new Stack<T>();
    }
    
    public void add(T a) {
        stackin.add(a);
    }
    
    public T poll() {
        if(stackout.isEmpty()) {
            while(!stackin.isEmpty()) {
                stackout.add(stackin.pop());
            }   
        }
        if (stackout.isEmpty()) {  
            throw new RuntimeException("No more element.");  
        }  
        return stackout.pop();

    }
    
}

两个队列实现栈:

入栈的时候正常存入一个队列,出栈的时候用另一个队列保存除最后一个元素以外的元素,并将最后一个元素出队。

public class QueueToStack<T> {
    Queue<T> queueA;
    Queue<T> queueB;
    Boolean isA;
    
    public QueueToStack() {
        queueA = new LinkedList<>();
        queueB = new LinkedList<>();
        isA = true;
    }
    
    public void push(T a) {
        if(isA) {
            queueA.offer(a);
        }else {
            queueB.offer(a);
        }
    }
    
    public T pop() {
        if(isA) {
            int size = queueA.size();
            for(int i = 0; i < size - 1; i++) {
                queueB.offer(queueA.poll());
            }
            isA = false;
            return queueA.poll();
        }else {
            int size = queueB.size();
            for(int i = 0; i < size - 1; i++) {
                queueA.offer(queueB.poll());
            }
            isA = true;
            return queueB.poll();
        }
    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 栈和队列作为两种典型的线性表,有着非常鲜明甚至可以说是相互对立的特点;栈先进后出(后进先出),队列先进先出(...
    IAM四十二阅读 748评论 0赞 2
  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 1,906评论 0赞 3
  • 栈 栈的英文单词是Stack,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入,...
    Jack921阅读 1,672评论 0赞 5
  • 栈:如何实现浏览器的前进和后退功能? 浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面 a-b...
    GhostintheCode阅读 1,021评论 0赞 2
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,915评论 1赞 32

友情链接更多精彩内容