劍指offer編程題Java實現——面試題7相關題用兩個隊列實現一個棧


劍指offer面試題7相關題目:用兩個隊列實現一個棧


解題思路:根據棧的先入后出和隊列的先入先出的特點
1.在push的時候,把元素向非空的隊列內添加
2.在pop的時候,把不為空的隊列中的size()-1份元素poll出來,添加到另為一個為空的隊列中,再把隊列中最后的元素poll出來
兩個隊列在棧不為空的情況下始終是有一個為空,另一個不為空的。push添加元素到非空的隊列中,pop把非空隊列的元素轉移到另一個空的隊列中,直到剩下最后一個元素,這個元素就是要出棧的元素(最后添加到隊列中的元素)。

 

 1 package Solution;
 2 
 3 import java.util.LinkedList;
 4 import java.util.Queue;
 5 
 6 /**
 7  * 劍指offer面試題7相關題目:用兩個隊列實現一個棧
 8  * 解題思路:根據棧的先入后出和隊列的先入先出的特點
 9  * 在push的時候,把元素向非空的隊列內添加
10  * 在pop的時候,把不為空的隊列中的size()-1份元素poll出來,添加到另為一個為空的隊列中,再把隊列中最后的元素poll出來
11  * 兩個隊列在棧不為空的情況下始終是有一個為空,另一個不為空的。push添加元素到非空的隊列中,pop把非空隊列的元素轉移到另一個空的隊列中,
12  * 直到剩下最后一個元素,這個元素就是要出棧的元素(最后添加到隊列中的元素)。
13  * @author GL
14  *
15  */
16 public class No7StackWithTwoQueues {
17 
18     public static void main(String[] args) {
19         push(1);
20         push(2);
21         push(3);
22         pop();
23         push(4);
24         pop();
25         pop();
26         pop();
27         pop();
28 
29     }
30 
31     private static Queue<Object> queue1=new LinkedList<Object>();
32     private static Queue<Object> queue2=new LinkedList<Object>();
33     
34     /*
35      * 向隊列中執行入棧操作時,把元素添加到非空的隊列中
36      */
37     public static void push(Object item){
38         if(!queue1.isEmpty())
39             queue1.offer(item);
40         else
41             queue2.offer(item);
42         System.out.println("入棧元素為:"+item);
43     }
44     
45     public static void pop(){
46         if(!isEmpty()){
47             if(queue1.isEmpty()){
48                 while(queue2.size()>1){
49                     queue1.offer(queue2.poll());
50                 }
51                 System.out.println("出棧元素為:"+queue2.poll());
52             }else{
53                 while(queue1.size()>1){
54                     queue2.offer(queue1.poll());
55                 }
56                 System.out.println("出棧元素為:"+queue1.poll());
57             }
58         }
59         else
60             throw new RuntimeException("棧為空,無法執行出棧操作");
61     }
62     
63     /*
64      * 檢查棧是否為空
65      */
66     private static boolean isEmpty(){
67         return queue1.isEmpty()&&queue2.isEmpty();
68     }
69 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM