zoukankan      html  css  js  c++  java
  • 实现一个队列类,该类用两个栈来实现

     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 }
  • 相关阅读:
    【JS基础】数组
    【JS基础】循环
    【JS基础】DOM操作
    移动端字体
    【JQ基础】
    【JS基础】
    WebBrowser.DocumentText引发FileNotFound异常
    抽取网络信息进行数据挖掘 建立语料库
    文本分类和聚类有什么区别?
    C# 读取网页源代码
  • 原文地址:https://www.cnblogs.com/luoweiKnowledge/p/3959312.html
Copyright © 2011-2022 走看看