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();
}
}