生活随笔
收集整理的這篇文章主要介紹了
java用队列实现栈、用栈实现对队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
用隊列實現棧
用棧實現對隊列
LeetCode題
225. 用隊列實現棧
232. 用棧實現隊列
用隊列實現棧
思路:
1.創建兩個隊列,
2.哪個隊列不為空就將要push的元素放到該隊列中,若都為空就默認放入qu1隊列中,
3.pop時,將不為空的隊列元素放入為空的隊列中,并彈出最后一個元素
import java.util.LinkedList;
import java.util.Queue;
class MyStack {//1.創建兩個隊列public Queue<Integer> qu1;public Queue<Integer> qu2;public MyStack() {qu1 = new LinkedList<>();qu2 = new LinkedList<>();}//2.哪個隊列不為空就將要push的元素放到該隊列中,若都為空就默認放入qu1隊列中,public void push(int x) {if(empty()){//都為空默認放入qu1中qu1.offer(x);}else if(!qu1.isEmpty()){//不為空就可以offerqu1.offer(x);}else{qu2.offer(x);}}//3.pop時,將不為空的隊列元素放入為空的隊列中,并彈出最后一個元素public int pop() {int len = 0;if(empty()){//都為空return -1;}if(!qu1.isEmpty()){//qu1不為空就放到qu2中(空)len = qu1.size();for(int i = 0; i < len - 1; ++i){//放入到qu2int x = qu1.poll();qu2.offer(x);}return qu1.poll();//彈}else{len = qu2.size();for(int i = 0; i < len - 1; ++i){//放入到qu1int x = qu2.poll();qu1.offer(x);}return qu2.poll();//彈}}//和pop一樣,只是一個return元素,一個return值public int top() {int len = 0;int x = 0;if(empty()){//都為空return -1;}if(!qu1.isEmpty()){//不為空就放到qu2中len = qu1.size();for(int i = 0; i < len; ++i){//放入到qu2x = qu1.poll();qu2.offer(x);}return x;//彈}else{len = qu2.size();for(int i = 0; i < len; ++i){//放入到qu1x = qu2.poll();qu1.offer(x);}return x;//彈}}//判空public boolean empty() {if(qu1.isEmpty() && qu2.isEmpty()){return true;}return false;}
}
用棧實現對隊列
思路:
1.創建兩個棧,
2.st1棧用于壓入元素,
3.st2用于彈出元素,
4.若st2為空,則將st1棧中的元素壓入st2棧中
import java.util.Stack;
class MyQueue {//1.創建兩個棧,Stack<Integer> st1;Stack<Integer> st2;public MyQueue() {st1 = new Stack();st2 = new Stack();}//2.st1棧用于壓入元素public void push(int x) {//第一個棧入,第二個棧出st1.push(x);}//3.st2用于彈出元素public int pop() {int len = 0;if(empty()){//都為空return -1;}if(!st2.empty()){//第二個不為空,直接出return st2.pop();}else{//第二個為空len = st1.size();int val = 0;for(int i = 0; i < len; ++i){val = st1.pop();st2.push(val);}return st2.pop();}}//與pop類似,只是返回值不同public int peek() {int len = 0;if(empty()){//都為空return -1;}if(!st2.empty()){//第二個不為空,直接出return st2.peek();}else{//第二個為空len = st1.size();int val = 0;for(int i = 0; i < len; ++i){val = st1.pop();st2.push(val);}return st2.peek();}}//判空public boolean empty() {if(st1.empty() && st2.empty()){return true;}return false;}
}
總結
以上是生活随笔為你收集整理的java用队列实现栈、用栈实现对队列的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。