歡迎瀏覽高耳機的博客
希望我們彼此都有更好的收獲
感謝三連支持!
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編程思想提供一些幫助。
如有不足之處請多多指出。
我是高耳機。?