兩個棧實現隊列+兩個隊列實現棧----java

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   os   strong   2014   

                                           兩個棧實現隊列+兩個隊列實現棧----java

一.兩個棧實現一個隊列

思路:所有元素進stack1,然後所有出stack1並進入stack2.實現隊列的先進先出即:若stack2非空,我們須要的恰好再棧頂,出棧;若要給隊列加入元素,即先進sack1,要出隊時,若stack2不為空白就出棧,為空白時就把stack1所有進棧到stack2

package com.sheepmu;import java.util.Stack;public class StacksToQueue { Stack<Integer> stack1=new Stack<Integer>() ; Stack<Integer> stack2=new Stack<Integer>(); public void addToTail(int x)//加入元素到隊尾   --進隊--- { stack1.push(x);  } public int deleteHead()//刪除對首      --出隊---    不需是隊不為空白才幹刪除呀~~~~ { if( pSize()!=0)//隊列不為空白 { if(stack2.isEmpty())//若stack2為空白,則把stack1所有加入stack2 stack1ToStack2();  return  stack2.pop();  } else { System.out.println("隊列已經為空白,不能運行從隊頭出隊"); return -1; }  }  public void stack1ToStack2()//把stack1所有放入stack2 { while(!stack1.isEmpty())  stack2.push(stack1.pop()); }  public int pSize()//隊列size() { return  stack1.size()+stack2.size();//兩個都為空白隊列才是空 }  public static void main(String[] args) { StacksToQueue  q=new StacksToQueue (); q.addToTail(1); q.addToTail(2); q.addToTail(3); q.addToTail(4); System.out.println(q.deleteHead()); System.out.println(q.deleteHead()); q.addToTail(5); System.out.println(q.deleteHead()); System.out.println(q.deleteHead()); System.out.println(q.deleteHead()); System.out.println(q.deleteHead()); }}

輸出:

1
2
3
4
5
隊列已經為空白,不能運行從隊頭出隊
-1

二.兩個隊列實現一個棧

思路:全部元素進入q1,由於我們的目的是棧,也就是最先出c,兒隊是從隊頭開始出,全部先把ab出q1併入q2,此時目標c跑到了隊頭,出q1。此時q1已經為空白,下一個要出的是b,把a從q2出隊並進q1,此時目標b在q2隊頭,出隊........

即:把非空隊列的n-1個壓人空對列,剩的第n個出隊...即總有一個隊列為空白。


ps:圖片原創於劍橋offer,來自網路

package com.sheepmu;import java.util.LinkedList;public class QueuesToStack {LinkedList<Integer> queue1=new LinkedList<Integer>();LinkedList<Integer> queue2=new LinkedList<Integer>();public void push(int value)//入棧{queue1.addLast(value);}public int pop()//出棧     必須是非空的棧才幹出棧啊{if(sSize()!=0)//棧不為空白{//移動一個隊的n-1個到還有一個中if(!queue1.isEmpty())//q1 空{putN_1ToAnthor();return queue1.removeFirst();}else  //q2 空{putN_1ToAnthor();return queue2.removeFirst();} }else{System.out.println("棧已經為空白啦,不能出棧");return -1;}}public int sSize(){return queue1.size()+queue2.size();}public void putN_1ToAnthor()//從非空中出隊n-1個到還有一個隊列   由於隊列總是一空一非空{if(!queue1.isEmpty()){while(queue1.size()>1){queue2.addLast(queue1.removeFirst());}}else if(!queue2.isEmpty()){while(queue2.size()>1){queue1.addLast(queue2.removeFirst());}}}public static void main(String[] args){QueuesToStack stack=new QueuesToStack();stack.push(1);stack.push(2);stack.push(3);stack.push(4);System.out.println(stack.pop());System.out.println(stack.pop());stack.push(5);stack.push(6);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());}}
輸出:

4
3
6
5
2
1
棧已經為空白啦,不能出棧
-1


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.