首页 > 代码库 > 实现一个队列类,该类用两个栈来实现

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

 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 stub53         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 }

 

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