欢迎浏览高耳机的博客
希望我们彼此都有更好的收获
感谢三连支持!
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编程思想提供一些帮助。
如有不足之处请多多指出。
我是高耳机。