棧 : 先進後出!java
隊列 : 先進先出!
node
那麼怎麼用棧來實現隊列呢?
spa
初版:
code
push() : 直接將元素進棧1;
orm
pop() : 棧1 元素進棧2 ,棧2 出元素 ! 出完將元素還給棧1.
隊列
總結:隊列要求先進先出 , 那越先進的元素 就在棧1的越下面 , 這樣才能保證越先進的元素 在 棧2的越上面. 因此每次pop()須要現將棧1中元素所有挪到棧2 , 出完 棧2 須要把元素還剩下的元素還回去!
it
//用兩個棧來實現一個隊列,完成隊列的Push和Pop操做。 隊列中的元素爲int類型。 package wj; import java.util.Stack; /** * Created by wangjia on 2015/8/10 */ public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); //進隊 public void push(int node) { stack1.push(node); } //出隊 public int pop() { while(!stack1.empty()){ stack2.push(stack1.pop()); } int result= stack2.pop(); while (stack2.empty()){ stack1.push(stack2.pop()); } return result; } }
第二版: io
初版雖然正確,可是感受有些繁瑣!!!整體思路是沒有錯的.class
通過分析以後,發現上訴步驟能夠省略一些.棧2中的元素確定是比棧1的中元素先進的!那是否有必要還回去呢?其實不用!
import
當棧2中有元素時,直接出棧就好了!!當棧2木有元素時,從棧1的底部拿.
package wj; import java.util.Stack; /** * Created by wangjia on 2015/8/10 */ public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } //出隊 public int pop() { if(stack2.empty()){ while(!stack1.empty()){ stack2.push(stack1.pop()); } } return stack2.pop(); } }