栈 和 队列 结构的互相实现

【用两个栈来实现一个队列】

1号栈用来实现入队的功能,即想入队的话,就让1号栈压栈就行了;那么如何实现出队功能呢,如果2号栈中有元素,让2号栈弹栈即可,若2号栈中没有元素了,现在入队最早的其实在1号栈的最底下,故令1号站都弹出,都压入2号栈中,这样入队最早的元素现在在2号栈的最顶端,再使2号栈弹栈即可。

【用两个队列来实现一个栈】

让一号队列实现压栈的功能,即压栈就让元素进入1号队列中,如果想弹栈,(后进先出),让1号队列的元素都出队,都入队到2号队列中去,除了最后一个元素,直接让他“出栈”,然后将队列1的变量储存队列2的地址,将队列2设为空。

class MyStack {
    Queue<Integer> q1;
    Queue<Integer> q2;

    public MyStack() {
        q1 = new LinkedList();
        q2 = new LinkedList();
    }
    
    public void push(int x) {
        q1.add(x);
    }
    
    public int pop() {
        while(q1.size()>1){
            q2.add(q1.remove());
        }
        int tmp = q1.remove();
        q1 = q2;
        q2 = new LinkedList();
        return tmp;
    }
    
    public int top() {
        int tmp = this.pop();
        q1.add(tmp);
        return tmp;
    }

    public boolean empty() {
        return q1.size()==0;
    }
}

发布了58 篇原创文章 · 获赞 0 · 访问量 995

猜你喜欢

转载自blog.csdn.net/Mason97/article/details/104361917
今日推荐