如何使用棧類比一個隊列

來源:互聯網
上載者:User

標籤:except   分享圖片   兩個棧   gif   oid   str   先進先出   container   ack   

隊列先進先出。

棧先進後出。

最近看到一道面試題,要求用兩個棧類比一個隊列,這個問題在一年前遇到過,記錄一下。

使用棧類比隊列,一個肯定不行,首先想到用兩個棧來類比隊列。

當隊列有資料要入隊時,我們同時將這個資料入棧A

此時我們認為,第一次向隊列中插入資料完成了。則我們將A中的資料彈出,使用B來接收這些值。

就這樣將A中的元素全部彈出並且壓進B中,這時就會發現,他們順序逆轉,並且如同隊列一樣,先進的元素到了棧頂,可以先出。

我們讓1出隊之後,此時我們還想繼續向隊列中添加資料。

 

 

此時,2依然是棧B放在棧頂的元素。此時有新的元素加入,我們依然採取剛才的方法,在新資料入隊時,插入資料到棧A中。

 插入棧A之後,我們可以對棧B進行判斷,如果棧B中還存有元素,則這名剛才添加的元素尚未全部出隊,他們仍然遵守先進先出的原則。

當棧B中的元素全部彈出之後,我們就可以將棧A中的元素再次彈出並壓進棧B,此時又實現了先進先出。

代碼實現:

  1. private Stack<Integer> stackA = new Stack<Integer>();

  2. private Stack<Integer> stackB = new Stack<Integer>();

  3.  

  4. /**

  5. * 入隊操作

  6. * @param element 入隊的元素

  7. */

  8. public void enQueue(int element) {

  9. stackA.push(element);

  10. }

  11.  

  12. /**

  13. * 出隊操作

  14. */

  15. public Integer deQueue() {

  16. if(stackB.isEmpty()){

  17. if(stackA.isEmpty()){

  18. return null;

  19. }

  20. transfer();

  21. }

  22. return stackB.pop();

  23. }

  24. ``

  25. ``

  26. /**

  27. * 棧A元素轉移到棧B

  28. */

  29. private void transfer(){

  30. while (!stackA.isEmpty()){

  31. stackB.push(stackA.pop());

  32. }

  33. }

  34. ``

  35. ``

  36. public static void main(String[] args) throws Exception {

  37. StackQueue stackQueue = new StackQueue();

  38. stackQueue.enQueue(1);

  39. stackQueue.enQueue(2);

  40. stackQueue.enQueue(3);

  41. System.out.println(stackQueue.deQueue());

  42. System.out.println(stackQueue.deQueue());

  43. stackQueue.enQueue(4);

  44. System.out.println(stackQueue.deQueue());

  45. System.out.println(stackQueue.deQueue());

  46. }

如何使用棧類比一個隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.