数据结构习题_用队列实现栈

题目链接: 用队列实现栈
图示详细思路如下:
数据结构习题_用队列实现栈_第1张图片
代码实现如下:

class MyStack {
    private Queue<Integer> qu1;
    private Queue<Integer> qu2;
    public MyStack() {
        qu1 = new LinkedList<>();
        qu2 = new LinkedList<>();
    }
    
    public void push(int x) {
        if(empty()){//栈为空,相当于qu1和qu2全为空
            qu1.offer(x);
        }else{
            if(qu1.isEmpty()){
                qu2.offer(x);
            }else{
                qu1.offer(x);
            }
        }
    }
    
    public int pop() {
        if(empty()){
            return -1;
        }
        if(qu1.isEmpty() == false){//qu1非空
            int size = qu1.size();//size标记qu1中元素个数
            for(int i = 0; i < size - 1;i++){//将qu1的前size - 1个元素出队并入队到qu2
                qu2.offer(qu1.poll());
            }
            return qu1.poll();//出队qu1最后一个元素,相当于出栈
        }else{//qu2非空
            int size = qu2.size();
            for(int i = 0; i < size - 1;i++){//将qu2的前size - 1个元素出队并入队到qu1
                qu1.offer(qu2.poll());
            }
            return qu2.poll();//出队qu2最后一个元素,相当于出栈
        }
    }
    
    public int top() {
         if(empty()){
            return -1;
        }
        if(qu1.isEmpty() == false){
            int size = qu1.size();
            int tmp = -1;//中间变量tmp,初始化为-1(为其他值也可以)
            for(int i = 0; i < size;i++){
                tmp = qu1.poll();
                qu2.offer(tmp);
            }
            return tmp;
        }else{
            int size = qu2.size();
            int tmp = -1;
            for(int i = 0; i < size;i++){
                tmp = qu2.poll();
                qu1.offer(tmp);
            }
            return tmp;
        }

    }
    
    public boolean empty() {
        if(qu1.isEmpty() && qu2.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */

运行结果:
数据结构习题_用队列实现栈_第2张图片

你可能感兴趣的:(数据结构,数据结构,java)