实现一个队列类,该类用两个栈来实现
生活随笔
收集整理的这篇文章主要介绍了
实现一个队列类,该类用两个栈来实现
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
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
总结
以上是生活随笔为你收集整理的实现一个队列类,该类用两个栈来实现的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 深入理解 C# 协变和逆变【转】
- 下一篇: 安卓学习-界面-ui-Toast