使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。
import java.util.Stack;
// 用栈是是实现队列
public class Que {
private Stack<Integer> stackIn = new Stack<>();// 声明
private Stack<Integer> stackOut = new Stack<>();
/**
* Initialize your data structure here.
*/
public void Que() {
stackIn = new Stack<>(); // 负责进栈
stackOut = new Stack<>(); // 负责出栈 加上是为了初始化
}
/**
* Push element x to the back of queue.
*/
public void push(int x) {
stackIn.push(x);
}
/**
* Removes the element from in front of queue and returns that element.
*/
public int pop() {
dumpstackIn();
return stackOut.pop();
}
/**
* Get the front element.
*/
public int peek() {
dumpstackIn();
return stackOut.peek();
}
/**
* Returns whether the queue is empty.
*/
public boolean empty() {
return stackIn.isEmpty() && stackOut.isEmpty();
}
// 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
private void dumpstackIn() {
if (!stackOut.isEmpty()) return;
while (!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
}
public static void main(String[] args) {
Que myQueue = new Que();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
System.out.println(myQueue.peek()); // return 1
System.out.println(myQueue.pop()); // return 1, queue is [2]
System.out.println(myQueue.peek());
System.out.println(myQueue.pop());
System.out.println(myQueue.empty()); // return false
}
}