实现一个队列类,该类用两个栈来实现
生活随笔
收集整理的這篇文章主要介紹了
实现一个队列类,该类用两个栈来实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 /*
2 * 實現(xiàn)一個隊列類,該類用兩個棧來實現(xiàn)
3 * 隊列和棧的主要區(qū)別是,隊列是先進先出,就像我們在食堂[派對打飯一樣,先到先打
4 * 棧是先進后出,就像槍里面的子彈,最先進去的把壓到了最低
5 * 因此我們只要修改一下peek()和pop(),以相反順序執(zhí)行操作,我們可以利用第二個棧來反轉(zhuǎn)元素的次序
6 * 這種做法是可行的,但是卻不是效率最高的,元素的移來移去,重復(fù)移動,毫無必要。
7 * 所以在這里我們可以延遲元素的移動,就讓元素一直留在第二個棧中,只有必須反轉(zhuǎn)元素次序時才移動元素
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()//實現(xiàn)元素的次序反轉(zhuǎn),元素從第一個棧中拿出然后放到第二個棧中
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 }
?
轉(zhuǎn)載于:https://www.cnblogs.com/luoweiKnowledge/p/3959312.html
總結(jié)
以上是生活随笔為你收集整理的实现一个队列类,该类用两个栈来实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解 C# 协变和逆变【转】
- 下一篇: 安卓学习-界面-ui-Toast