用栈实现队列
232. 用栈实现队列
队列是先进先出,栈是先进后出,要想用栈实现队列,那么需要两个栈,一个负责进StackIn,一个负责出StackOut
- 入队:只需要push进StackIn
- 出队:需要考虑StackOut是否为空,不为空时,直接从其中出队即可,如果为空,那么将StackIn的元素全部pop到StackOut中
class MyQueue {
Stack stackIn;
Stack stackOut;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
dumpstackIn();
return (int)stackOut.pop();
}
public int peek() {
dumpstackIn();
return (int)stackOut.peek();
}
public boolean empty() {
return stackIn.empty() && stackOut.empty();
}
//如果stackOut为空,那么将stackIn的数据push到stackOut
public void dumpstackIn() {
if (stackOut.empty()) {
while (!stackIn.empty()) {
stackOut.push(stackIn.pop());
}
}
}
}
用队列实现栈
225. 用队列实现栈
本题可以使用两个队列或者一个队列
- 两个队列:其中一个作为辅助,当pop元素时,主队列中前面的元素都加入到辅助队列中,然后再把这些元素加回到主队列
- 一个队列:不需要辅助队列,将前面的元素加入到队列的末端
不管是一个还是两个,top元素时都不好解决,因为普通队列并没有直接返回队尾元素的方法