标签:style blog color java ar for div sp log
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 }
标签:style blog color java ar for div sp log
原文地址:http://www.cnblogs.com/luoweiKnowledge/p/3959312.html