理论基础
自己看java八股
232.用栈实现队列
大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。
文章讲解/视频讲解:代码随想录
题目链接:232. 用栈实现队列
Stack<Integer> stackIn; Stack<Integer> stackOut; public MyQueue() { stackIn = new Stack<>(); stackOut = new Stack<>(); } public void push(int x) { stackIn.push(x); } public int pop() { isUpdata(); return stackOut.pop(); } public int peek() { isUpdata(); return stackOut.peek(); } public boolean empty() { return (stackIn.empty() && stackOut.empty()); } private void isUpdata(){ if(!stackOut.isEmpty()){ return; }else{ while (!stackIn.isEmpty()){ stackOut.push(stackIn.pop()); } } }
栈(Stack)的常用方法:
push(element)
:将元素压入栈顶。pop()
:弹出并返回栈顶的元素。peek()
:返回栈顶的元素,但不进行弹出操作。isEmpty()
:判断栈是否为空,如果栈为空则返回true
,否则返回false
。size()
:返回栈中元素的个数。队列(Queue)的常用方法:
offer(element)
:将元素插入队尾。poll()
:移除并返回队头的元素。peek()
:返回队头的元素,但不进行移除操作。isEmpty()
:判断队列是否为空,如果队列为空则返回true
,否则返回false
。size()
:返回队列中元素的个数。Deque(双端队列)的常用方法:
offerFirst(element)
:将元素插入双端队列的头部。offerLast(element)
:将元素插入双端队列的尾部。pollFirst()
:移除并返回双端队列的头部元素。pollLast()
:移除并返回双端队列的尾部元素。peekFirst()
:返回双端队列的头部元素,但不进行移除操作。peekLast()
:返回双端队列的尾部元素,但不进行移除操作。isEmpty()
:判断双端队列是否为空,如果双端队列为空则返回true
,否则返回false
。size()
:返回双端队列中元素的个数。
225. 用队列实现栈
可以大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。
文章讲解/视频讲解:代码随想录
题目链接: 225. 用队列实现栈
class MyStack { Queue<Integer> queue1; // 和栈中保持一样元素的队列 Queue<Integer> queue2; // 辅助队列 public MyStack() { queue1 = new LinkedList<>(); queue2 = new LinkedList<>(); } public void push(int x) { queue1.add(x); } public int pop(){ while(queue1.size()>1){ queue2.add(queue1.poll()); } int temp = queue1.poll(); while(queue2.size() !=0){ queue1.add(queue2.poll()); } return temp; } public int top() { while(queue1.size()>1){ queue2.add(queue1.poll()); } int temp = queue1.peek(); queue2.add(queue1.poll()); while(queue2.size() !=0){ queue1.add(queue2.poll()); } return temp; } public boolean empty() { return queue1.isEmpty() && queue2.isEmpty(); } }
在Java中,Queue和Deque可以使用以下类进行创建:
创建 Queue(队列):
- LinkedList
- PriorityQueue
- ArrayDeque
创建 Deque(双端队列):
- LinkedList
- ArrayDeque
具体选择使用哪个类来创建Queue或Deque取决于你的需求和场景:
- 如果需要使用优先级队列(Priority Queue)实现Queue,可以选择使用PriorityQueue类。
- 如果需要在队列的两端进行插入和删除操作,以及支持栈的特性,可以选择使用ArrayDeque类或LinkedList类。
- LinkedList类实现了Queue和Deque接口,因此可以用来创建Queue和Deque对象。
- ArrayDeque类同样也实现了Queue和Deque接口,并且具有更高的性能,适用于大部分的Queue和Deque场景。