学习目标:
60天训练营打卡计划!
学习内容:
232.用栈实现队列
- java中新建栈的方法 : Stack stackIn = new Stack<>();
- java中体现栈结构的操作方法:
-
-
-
-
-
-
-
- search(Object obj) - 查找元素出现位置
- 总结规律:有3个p和一个e
- 使用栈实现队列时,需要一个入栈和一个出栈。经过两个栈后,出栈的顺序就变为先进先出!
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
this.stackIn = new Stack<>();
this.stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
if(stackOut.isEmpty()){
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
return stackOut.pop();
}
public int peek() {
int result = this.pop();
stackOut.push(result);
return result;
}
public boolean empty() {
return stackIn.isEmpty() && stackOut.isEmpty();
}
}
3225. 用队列实现栈
- java中新建队列的方法 : Queue que = new LinkedList<>();
- java中体现队列结构的操作方法:
-
- 加入元素到队列尾部: add(Object obj)/offer(Object obj)
-
- 获取队列头部元素,不删除该元素:element()/peek()
-
- 获取队列头部元素,并删除该元素: remove()/poll()
-
-
-
- 使用队列实现栈时,仅需要一个队列。前n - 1个出队列的元素加入队列尾部,出队列的顺序就变为先进后出!
class MyStack {
Queue<Integer> que;
public MyStack() {
que = new LinkedList<>();
}
public void push(int x) {
que.add(x);
}
public int pop() {
int size = que.size();
while(size-- > 1){
this.push(que.poll());
}
return que.poll();
}
public int top() {
int result = this.pop();
this.push(result);
return result;
}
public boolean empty() {
return que.isEmpty();
}
}
学习时间:
- 上午一小时,下午一个半小时(学习KMP算法),整理文档半小时。
- 12月14日复习,单队列实现栈的思路有所遗忘。
- 2024.2.21 复习栈和队列的常用api