题解 | #由两个栈组成的队列#
由两个栈组成的队列
http://www.nowcoder.com/practice/6bc058b32ee54a5fa18c62f29bae9863
由两个栈组成的队列
一个栈专门进栈push_stack,一个栈专门出栈pop_stack 形成队列先进先出原则
- 如果要出队,需要将push_stack所有元素压入 pop_stack 再弹出
- 如果 需要将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();
}
}