欢迎浏览高耳机的博客
希望我们彼此都有更好的收获
感谢三连支持!
1.用栈实现队列
当队列中进入这些元素时,相应的栈1中元素出栈顺序与出队列相反,因此我们可以使用两个栈来使元素的出栈顺序相同;
通过将栈1元素出栈,再入栈栈2,此时出队列的顺序和出栈2的顺序相同,基于这个原理,我们开始实现代码:
import java.util.ArrayDeque;public class MyQueueUsStack {public ArrayDeque<Integer> s1;public ArrayDeque<Integer> s2;public MyQueueUsStack(){s1 = new ArrayDeque<>();s2 = new ArrayDeque<>();}// 入队操作,直接将元素压入第一个栈public void push(int x){s1.push(x);}public int pop(){if(empty()){return -1;}if(s2.isEmpty()){// 如果第二个栈为空,则将第一个栈中的元素全部转移到第二个栈while (!s1.isEmpty()){s2.push(s1.pop());}}return s2.pop();}public int peek(){if(empty()){return -1;}if(s2.isEmpty()){while (!s1.isEmpty()){s2.push(s1.pop());}}return s2.peek();}public boolean empty(){return s1.isEmpty() && s2.isEmpty();}
}
OJ:
https://leetcode.cn/problems/implement-queue-using-stacks/description/
2.用队列实现栈
当前一共有N个元素,当需要出栈栈顶元素67时,先将队列1中前N-1个元素放入到队列2中:
每次出栈时,只需要将不为空的队列的前N-1个元素放入空队列中,此时队列中的元素即为要出栈的元素;
入栈时,将元素放入不为空的队列中;若两个队列都为空,则放入创建的第一个队列中;
import java.util.LinkedList;
import java.util.Queue;public class MyStackUsQueue {public Queue<Integer> queue1;public Queue<Integer> queue2;public MyStackUsQueue(){queue1 = new LinkedList<>();queue2 = new LinkedList<>();}public void push(int x){if(empty()){queue1.offer(x);return;}if(!queue1.isEmpty()){queue1.offer(x);}else{queue2.offer(x);}}public int pop(){if(empty()){return -1;}if(!queue1.isEmpty()) {int size = queue1.size();for (int i = 0; i < size-1; i++) {queue2.offer(queue1.poll());}return queue1.poll();}else{int size = queue2.size();for (int i = 0; i < size-1; i++) {queue1.offer(queue2.poll());}return queue2.poll();}}public int peek(){if(empty()){return -1;}if(!queue1.isEmpty()) {int size = queue1.size();int ret = -1;for (int i = 0; i < size; i++) {ret = queue1.poll();queue2.offer(ret);}return ret;}else{int size = queue2.size();int ret = -1;for (int i = 0; i < size; i++) {ret = queue2.poll();queue1.offer(ret);}return ret;}}public boolean empty(){return queue1.isEmpty() && queue2.isEmpty();}
}
OJ:
https://leetcode.cn/problems/implement-stack-using-queues/solutions/
希望这篇博客能为你理解java编程思想提供一些帮助。
如有不足之处请多多指出。
我是高耳机。