实现说明:
入队时,将元素压入s1;
出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队;
这个思路,避免了反复“倒”栈,仅在需要时才“倒”一次。
package com.knowledgeStudy.threadLocal;
import java.util.Stack;
public class MyQueue {
Stack<Object> s1 = new Stack<Object>();//入栈
Stack<Object> s2 = new Stack<Object>();//出栈
// Push element x to the back of queue.
public void push(Object x) {
s1.push(x);
}
// Removes the element from in front of queue.
public void pop() {
if (!s2.isEmpty()) {
s2.pop();
} else {
while (!s1.isEmpty()) {
s2.push(s1.pop());
}
s2.pop();
}
}
// Get the front element.
public Object peek() {
if (!s2.isEmpty()) {
return s2.peek();
} else {
while (!s1.isEmpty()) {
s2.push(s1.pop());
}
return s2.peek();
}
}
// Return whether the queue is empty.
public boolean empty() {
return s1.empty() && s2.empty();
}
//测试
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.push(1);
queue.pop();
System.out.println(queue.empty());
}
}