232、栈实现队列
代码:
class MyQueue { Stack<Integer> stackOut; Stack<Integer> stackIn; public MyQueue() { stackOut = new Stack<>();//负责出栈 stackIn = new Stack<>();//负责进栈 } public void push(int x) { stackIn.push(x); } public int pop() { dumpStackIn(); return stackOut.pop(); } public int peek() { dumpStackIn(); return stackOut.peek(); } public boolean empty() { return stackIn.isEmpty() && stackOut.isEmpty(); } private void dumpStackIn(){ if (stackOut.isEmpty()){ while (!stackIn.isEmpty()){ stackOut.push(stackIn.pop()); } } } }
225、队列实现栈
具体实现:

代码:
class MyStack { Deque<Integer> que1; // 和栈中保持一样元素的队列 Deque<Integer> que2; // 辅助队列 public MyStack() { que1 = new ArrayDeque<>(); que2 = new ArrayDeque<>(); } public void push(int x) { que1.addLast(x); } public int pop() { int size = que1.size(); size--; // 将 que1 导入 que2 ,但留下最后一个值 while (size-- > 0){ que2.addLast(que1.peekFirst()); que1.pollFirst(); } int res = que1.pollFirst(); que1 = que2; // 将 que2 对象的引用赋给了 que1 ,此时 que1,que2 指向同一个队列 que2 = new ArrayDeque<>();// 如果直接操作 que2,que1 也会受到影响,所以为 que2 分配一个新的空间 return res; } public int top() { return que1.peekLast(); } public boolean empty() { return que1.isEmpty(); } }