下面是对StackQueue
类及其方法的注释,该类使用两个栈(stackIn
和stackOut
)来模拟队列的行为:
class MyQueue {
private Stack<Integer> s1, s2;
public MyQueue() {
s1 = new Stack<>();
s2 = new Stack<>();
}
// 添加元素到队尾
public void push(int x) {
s1.push(x);
}
// 返回队头元素
public int peek() {
if (s2.isEmpty())
// 把 s1 元素压入 s2
while (!s1.isEmpty()) {
s2.push(s1.pop());
}
return s2.peek();
}
// 删除队头元素并返回
public int pop() {
// 先调用 peek 保证 s2 非空
peek();
return s2.pop();
}
// 判断队列是否为空
// 两个栈都为空才说明队列为空
public boolean empty() {
return s1.isEmpty() && s2.isEmpty();
}
}
这个StackQueue
类通过两个栈的相互配合,实现了队列的先进先出(FIFO)特性。
其中,stackIn
用于处理入队操作,而stackOut
则用于处理出队操作。
当需要出队时,如果stackOut
为空,则将stackIn
中的所有元素逆序压入stackOut
,
这样stackOut
的栈顶元素就是队列中最早进入的元素,实现了队列的出队操作。