[[[toc]]]
栈
两个栈实现队列(push、pop、count)
思路:
- 栈1:专门用来入队
- 栈2:专门用来出队
- 出队时如果栈2为空,就把栈1全部倒入栈2,保证顺序变成队列 FIFO
import java.util.Stack;
// 两个栈实现队列
class MyQueue {
private Stack<Integer> stackIn; // 入队栈
private Stack<Integer> stackOut; // 出队栈
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
// 入队
public void push(int val) {
stackIn.push(val);
}
// 出队
public int pop() {
// 如果出队栈为空,把入队栈全部倒过来
if (stackOut.isEmpty()) {
while (!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
}
return stackOut.pop();
}
// 元素个数
public int count() {
return stackIn.size() + stackOut.size();
}
}
// 测试
public class Main {
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.push(3);
System.out.println(queue.pop()); // 1
System.out.println(queue.count()); // 2
System.out.println(queue.pop()); // 2
System.out.println(queue.count()); // 1
}
}