代码随想录 第十天 | ● 理论基础 ● 232.用栈实现队列 ● 225. 用队列实现栈
队列的方法:
- 添加元素:
- add(E e): 将指定的元素添加到队列的尾部,如果队列已满则抛出异常。
- offer(E e): 将指定的元素添加到队列的尾部,如果队列已满则返回false。
- 移除元素:
- remove(): 移除并返回队列的头部元素,如果队列为空则抛出异常。
- poll(): 移除并返回队列的头部元素,如果队列为空则返回null。
- 获取头部元素:
- element(): 返回队列的头部元素但不移除,如果队列为空则抛出异常。
- peek(): 返回队列的头部元素但不移除,如果队列为空则返回null。
在Java中,队列的常见实现类包括LinkedList和ArrayDeque,它们都实现了Queue接口。
栈的方法:
- 添加元素:
- push(E e): 将指定的元素压入栈顶。
- 移除元素:
- pop(): 移除并返回栈顶元素。
- 获取栈顶元素:
- peek(): 返回栈顶元素但不移除。
- 判断栈是否为空:
- empty(): 如果栈为空则返回true,否则返回false。
在Java中,栈的常见实现类是Stack类,它继承自Vector类。
leetcode:232. 用栈实现队列 - 力扣(LeetCode)
思路:用两个栈代替队列,一个输入一个输出。这样反一下正好是队列的先入先出的顺序
class MyQueue { 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() {//出 dumpstackIn(); return StackOut.pop(); } public void dumpstackIn() {
//只要输入栈还有就继续将元素移到输出栈中 if(!StackOut.isEmpty()) return; while(!StackIn.isEmpty()){ StackOut.push(StackIn.pop()); } } public int peek() { dumpstackIn(); return StackOut.peek(); } public boolean empty() { if(StackIn.isEmpty() && StackOut.isEmpty()){ return true; } return false; } }
leetcode:225. 用队列实现栈 - 力扣(LeetCode)
思路:其实也很多种,可以用两个队列,也可以用一个队列,主要目的就是将队列里的输入的1234变成4321的顺序输出,达到实现栈目的。我的想法是一输入push就循将加进队列里的数循环一遍再加入到队列里,这样就达成目的了。
class MyStack { Queue<Integer> Que1; public MyStack() { Que1 = new LinkedList<>(); } public void push(int x) { Que1.offer(x);
//循环length-1次 int Quelenth = Que1.size(); for(int i = 0; i < Quelenth -1; i++){ Que1.offer(Que1.poll()); } } public int pop() { return Que1.poll(); } public int top() { return Que1.peek(); } public boolean empty() { return Que1.peek() == null; } }
总结:栈和队列还是比较简单的,能够看懂动画模拟过程就会了,要记住对应的方法!