实现一个队列类,该类用两个栈来实现

 1 /*
 2  * 实现一个队列类,该类用两个栈来实现
 3  * 队列和栈的主要区别是,队列是先进先出,就像我们在食堂[派对打饭一样,先到先打
 4  * 栈是先进后出,就像枪里面的子弹,最先进去的把压到了最低
 5  * 因此我们只要修改一下peek()和pop(),以相反顺序执行操作,我们可以利用第二个栈来反转元素的次序
 6  * 这种做法是可行的,但是却不是效率最高的,元素的移来移去,重复移动,毫无必要。
 7  * 所以在这里我们可以延迟元素的移动,就让元素一直留在第二个栈中,只有必须反转元素次序时才移动元素
 8  * 
 9  * 
10  * */
11 
12 import java.util.Stack;
13 
14 public class StackToQueue<T> {
15     Stack<T> stackNew,stackOld;
16     public StackToQueue()
17     {
18         stackNew = new Stack<T>();
19         stackOld = new Stack<T>();
20         
21     }
22     public int size()
23     {
24         return stackNew.size()+stackOld.size();
25     }
26     public void add(T value)//添加元素就放在第一个栈中
27     {
28         stackNew.push(value);
29     }
30     private void shiftStacks()//实现元素的次序反转,元素从第一个栈中拿出然后放到第二个栈中
31     {
32         if(stackOld.isEmpty())
33         {
34             while(!stackNew.isEmpty())
35             {
36                 stackOld.push(stackNew.pop());
37             }
38         }
39     }
40     public T peek()
41     {
42         shiftStacks();
43         return stackOld.peek();
44     }
45     public T remove()
46     {
47         shiftStacks();
48         return stackOld.pop();
49     }
50 
51     public static void main(String[] args) {
52         // TODO Auto-generated method stub
53         StackToQueue queue = new StackToQueue();
54         queue.add(1);
55         queue.add(2);
56         queue.add(3);
57         queue.add(4);
58         queue.add(5);
59         int temp=queue.size();
60         for(int i=0;i<temp;i++)
61         {
62             System.out.println("队头元素:"+queue.remove());
63         }
64         
65         
66     }
67 
68 }
原文地址:https://www.cnblogs.com/luoweiKnowledge/p/3959312.html