《算法导论》:236页10.1-6,10.1-7,要求实现:两个stack实现queue;两个queue实现stack。
参考:http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html讲解了原理。
讨论区:http://stackoverflow.com/questions/69192/how-to-implement-a-queue-using-two-stacks有一个人回答实现了“1个stack实现queue”。
摘录如下:
public class QueueFromSingleStack<E> {
private java.util.Stack<E> stack = new java.util.Stack<E>();
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
QueueFromSingleStack<Integer> queueFromSingleStack=new QueueFromSingleStack<>();
queueFromSingleStack.insert(1);
queueFromSingleStack.insert(-2);
queueFromSingleStack.remove();
System.out.println(queueFromSingleStack.remove());
}
/*关键步骤,其实是用递归的方式将内存作为第二个临时stack*/
public void insert(E elem) {
if (!stack.empty()) {
E topElem = stack.pop();
insert(elem);
stack.push(topElem);
}
else
stack.push(elem);
}
public E remove() {
return stack.pop();
}
}