题解 | #由两个栈组成的队列#

由两个栈组成的队列

http://www.nowcoder.com/practice/6bc058b32ee54a5fa18c62f29bae9863

由两个栈组成的队列

一个栈专门进栈push_stack,一个栈专门出栈pop_stack 形成队列先进先出原则

  1. 如果要出队,需要将push_stack所有元素压入 pop_stack 再弹出
  2. 如果 需要将push_stack的元素压入pop_stack中,需要保证pop_stack为空 例如 push_stack [5,4,3] , pop_stack[1] 正常是pop_stack为空再压入再出栈 得出[1,5,4,3] 而pop_stack不为空压入再出栈 结果就是[5,4,3,1]
import java.util.*;
import java.io.*;
public class Main{
    static Stack<Integer> pop_st = new Stack<>(); //专门负责出栈
    static Stack<Integer> push_st = new Stack<>(); // 专门负责进栈
    
    public static void add(int num){
        push_st.push(num);
    }
    
    // 需要将push_stack的元素压入pop_stack中,需要保证pop_stack为空
    public static void pushToPop(){
        if(pop_st.isEmpty()){
            while(!push_st.isEmpty()){//且push_stack有数据
                pop_st.push(push_st.pop());
            }
        }
    }
    
    public static void poll(){
        if(push_st.isEmpty() && pop_st.isEmpty()){ //两个栈都空则队列为空
            System.out.println("队列为空");
        }
        pushToPop();//出队需要将push_stack所有元素压入 pop_stack
        pop_st.pop();
    }
    public static int peek(){
         if(push_st.isEmpty() && pop_st.isEmpty()){//两个栈都空则队列为空
            System.out.println("队列为空");
        }
        pushToPop();//队头 也需要将push_stack所有元素压入 pop_stack
        return pop_st.peek();
    }
    public static void main(String args[])throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.valueOf(in.readLine());
        
        for(int i = 0; i < n; i++){
            String ins[] = in.readLine().split(" ");
            String op = ins[0];
            if("add".equals(op)){
                int num = Integer.valueOf(ins[1]);
                add(num);
            }else if("poll".equals(op)){
                poll();
            }else{
                System.out.println(peek());
            }
        }
        in.close();
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务