首页 > 代码库 > 实现一个队列类,该类用两个栈来实现
实现一个队列类,该类用两个栈来实现
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 }
实现一个队列类,该类用两个栈来实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。