1.题目
题目描述
用两个栈实现队列,支持队列的基本操作。
输入描述:
第一行输入一个整数N,表示对队列进行的操作总数。 下面N行每行输入一个字符串S,表示操作的种类。 如果S为"add",则后面还有一个整数X表示向队列尾部加入整数X。 如果S为"poll",则表示弹出队列头部操作。 如果S为"peek",则表示询问当前队列中头部元素是多少。
输出描述:
对于每一个为"peek"的操作,输出一行表示当前队列中头部元素是多少。
示例1
输入
复制
6 add 1 add 2 add 3 peek poll peek
输出
复制
1 2
主要思路:
主要是在poll和peek阶段 第二个stack进栈之前,判断第二个stack是否为空?
2.代码实现
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException{
Stack<Integer> stackpush = new Stack<Integer>();
Stack<Integer> stackpop = new Stack<Integer>();
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(buf.readLine());
for(int i =0;i<n;i++){
String[] str = buf.readLine().split(" ");
if(str[0].equals("add")){
stackpush.push(Integer.parseInt(str[1]));
}else if(str[0].equals("peek")){
if(stackpop.isEmpty()){
while (!stackpush.isEmpty()){
stackpop.push(stackpush.pop());
}
}
System.out.println(stackpop.peek());
}else if(str[0].equals("poll")){
if(stackpop.isEmpty()){
while (!stackpush.isEmpty()){
stackpop.push(stackpush.pop());
}
}
stackpop.pop();
}
}
buf.close();
}
}
3.总结
这个题目主要是为了理解stack和queue的属性;
理解pop和peek,poll的区别:
pop:栈 返回栈顶元素同时,去栈顶元素;
peek:栈,仅返回栈顶元素,可用于队列;
poll:用于队列,返回头元素。