-
用两个栈来实现一个队列,完成队列的Push和Pop操作。
队列中的元素为int类型。
题目来源:http://ac.jobdu.com/problem.php?pid=1512
题目描述:
-
输入:
-
每个输入文件包含一个测试样例。
对于每个测试样例,第一行输入一个n(1<=n<=100000),代表队列操作的个数。
接下来的n行,每行输入一个队列操作:
1. PUSH X 向队列中push一个整数x(x>=0)
2. POP 从队列中pop一个数。
-
输出:
-
对应每个测试案例,打印所有pop操作中从队列pop中的数字。如果执行pop操作时,队列为空,则打印-1。
-
样例输入:
-
3 PUSH 10 POP POP
-
样例输出:
-
10 -1
-
思路:遇到PUSH X ,X进栈A;
-
遇到POP,分情况:栈B为空且A不为空,A全部出栈进栈B,栈B出站一次;
-
栈B为空且A为空,打印-1;
-
栈B不为空,B出栈一次;
-
JAVA实现
-
import java.util.*; public class CPFP { <span style="white-space:pre"> </span>public static void main(String[] args) { StactForQueue(); } static void StactForQueue(){ Stack<String> stack1=new Stack<String>(); Stack<String> stack2= new Stack<String>(); Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); for(int i=0;i<n;i++) { String option = sc.nextLine(); if(option.startsWith("PUSH")) { String m = option.split(" ")[1]; stack1.push(m); } else if(option.startsWith("POP")){ if(stack2.empty()){ if(stack1.empty())System.out.println("-1"); else { while(!stack1.empty())stack2.push(stack1.pop()); System.out.println(stack2.pop()); } } else System.out.println(stack2.pop()); } //System.out.println(stack1.size()); //System.out.println(stack2.size()); } } }