JS Bin

剑指Offer(栈和队列)-用两个栈实现队列

  (用两个栈实现队列)题目描述:


用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。


 

  对于栈的数据结构,元素在里面是先进后出的,比如输入数据{a,b,c},这样的一行数据希望利用两个栈来实现,以最终队列的形式,那么就得先进先出,而在栈中,最先输入进去的a是在栈底的位置的,所以要让队列实现里面有pop操作那么就得让a先出来,所以在此之前先对栈一进行压栈操作,由于a在最底层,所以需要将b,c都弹出来,弹出来的数据压栈到stack2里面,这样子在stack2中就是{c,b},此时队列pop出来了a元素,现在需要得到本来先进去的b,然后c,所以直接将Stack2的元素pop出来就行了。结论可以总结为:

  (1)当插入时,直接插入 stack1。

  (2)当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 stack2,再弹出 stack2 栈顶元素。

       

 

 

   实现:push操作就将所有的元素都先压进stack1里面,pop操作就是先判断stack2里面是否存在有元素,如有先弹出,没有的话就一直将stack1里面的元素全部弹出来再压进stack2。

import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
        if(stack2.size()<=0){
            while(stack1.size()!=0){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}

  

posted @ 2020-03-21 16:41  左五六  阅读(185)  评论(0编辑  收藏  举报