使用兩個隊列模擬一個棧


准備筆試,在看相關知識,看到這個問題,如何使用兩個隊列模擬一個棧,在參考了相關知識下,實現了代碼如下:

 1     public class Stack<E>{
 2         Queue<E> q1 = null; //隊列q1提供壓棧功能,
 3         Queue<E> q2 = null; //隊列q2提供彈棧功能
 4         
 5         public Stack(){
 6             q1 = new LinkedList<E>();
 7             q2 = new LinkedList<E>();
 8         }
 9         //判斷棧是否為空
10         public synchronized boolean isEmpty(){
11             return q1.isEmpty()&&q2.isEmpty();
12         }
13         
14         //統計棧中元素個數
15         public synchronized int size(){
16             return q1.size()+q2.size();
17         }
18         
19         //入棧
20         public synchronized void push(E data){
21             q1.add(data);
22         }
23         
24         //出棧
25         public synchronized E pop(){
26             E temp = null;
27             //如隊列q1只有一個元素,q1直接取隊首元素並輸出
28             if(q1.size()==1)
29                 temp = q1.poll();
30             
31             //如隊列q1不止一個元素,q1取隊首元素並放入q2中,直到倒數第二個元素,最后一個元素輸出,
32             //然后再將q2中元素入隊列q1
33             if(q1.size()>1){
34                 for(int i=0;i<q1.size();i++){
35                     q2.add(q1.poll());
36                 }
37                 
38                 temp=q1.poll();  //取隊列q1最后一個元素
39                     
40                 while(!q2.isEmpty()){//再將q2中元素入隊列q1
41                     q1.add(q2.poll());
42                 }
43             }
44             return temp;
45         }
46         
47         //取棧頂元素
48         public synchronized E peek(){
49             E temp = null;
50             //如隊列q1只有一個元素,q1直接取隊首元素並輸出
51             if(q1.size()==1)
52                 temp = q1.peek();
53             
54             //如隊列q1不止一個元素,q1取隊首元素並放入q2中,直到倒數第二個元素,最后一個元素輸出,
55             //然后再將q2中元素入隊列q1
56             if(q1.size()>1){
57                 for(int i=0;i<q1.size();i++){
58                     q2.add(q1.poll());
59                 }
60                 temp=q1.peek();
61                     
62                 while(!q2.isEmpty()){
63                     q1.add(q2.poll());
64                 }
65             }
66             return temp;
67         }
68     }

 


免責聲明!

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



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