用两个栈实现一个队列。
由于栈的特性是后进先出,而队列的特性是先进先出。 当A栈从栈底到栈顶依次有元素1,2,3。而要模拟队列时,出队列必需是1,2,3。此时,则可以将栈A中的元素依次弹出,进入栈B,则形成3,2,1的顺序,再从栈B弹出时就是1,2,3的顺序了。 有了这个思想就可以写出如下代码:
// 用于进队列 Deque<Integer> first = new ArrayDeque<Integer>(); // 用于出队列,出队的元素必需从此栈弹出。如果为空时将first栈中的元素入栈。 Deque<Integer> second = new ArrayDeque<Integer>(); public CQueue() { } // 元素进队列 public void appendTail(int value) { first.push(value); } // 元素出队列 public int deleteHead() { // 出队列时如果s2是空,就需要把s1的数据导过来。 if (second.isEmpty()) { while (!first.isEmpty()) { second.push(first.pop()); } } // 出队的元素必需经过second栈 return second.isEmpty() ? -1 : second.pop(); }此题主要是理解栈的后进先出及队列的先进先出特点。