day09
栈与队列基础知识
栈:先进后出
队列:先进先出
例题 leetcode 232.用栈实现队列
链接:https://leetcode.cn/problems/implement-queue-using-stacks/
思路:用两个栈模拟队列的先进先出的模式。一个用来输入,一个用来输出。pop操作时本题的重点,若输出栈为空,
则将输入栈的内容全部导入,若输出栈不为空,直接获取输出栈内的数据即可。
class MyQueue {
Stack <Integer> stackIn;
Stack <Integer> stackOut;
int size;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
size = 0;
}
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()) return;
while (!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
例题 leetcode 225.用队列实现栈
链接:https://leetcode.cn/problems/implement-stack-using-queues/
思路:用两个队列来实现,一个是弹出顺序和栈一致的队列,另外一个在push的时候保持元素顺序。
和用栈实现队列不太一样。
class MyStack {
Queue<Integer> que1;
Queue<Integer> que2;
int size;
public MyStack() {
que1 = new LinkedList<>();
que2 = new LinkedList<>();
size = 0;
}
public void push(int x) {
que2.offer(x);
while(! que1.isEmpty()){
que2.offer(que1.poll());
}
Queue<Integer> temp = que1;
que1 = que2;
que2 = temp;
}
public int pop() {
return que1.poll();
}
public int top() {
return que1.peek();
}
public boolean empty() {
return que1.isEmpty();
}
}