栈的特性是先进后出,队列的特性是先进先出
用两个栈实现一个队列的remove(),就是要把第一个栈的元素反转压入第二个栈,再依次弹出即可
队列添加元素add()要添加在第一个栈里
import java.util.Stack;
public class MyQueue<T> {
Stack <T> stackNewest, stackOldest;
public MyQueue() {
stackNewest = new Stack<T>();
stackOldest = new Stack<T>();
}
public int size() {
return stackNewest.size() + stackOldest.size();
}
//add new element, push value to stackNewest
public void add(T value) {
stackNewest.push(value);
}
//move all the elements in stackNewest to stackOldest, so that we can pop elements as a queue
private void shiftStacks() {
if ( stackOldest.isEmpty() ) {
while ( !stackNewest.isEmpty() ) {
stackOldest.push( stackNewest.pop() );
}
}
}
//look up the first element in queue
public T peek() {
shiftStacks();
return stackOldest.peek();
}
//remove the first element in queue
public T remove() {
shiftStacks();
return stackOldest.pop();
}
}