zoukankan      html  css  js  c++  java
  • 如何用两个栈实现一个队列

         在数据结构中,我们都学习过队列和栈,我们知道栈的基本特征是后进先出,这个当然也很好理解,用一句歇后语给大家通俗得解释一下,就是: 砌墙的砖瓦——后来居上。很容易明白,就是后面来的反倒在最上面,当然你取的话,是不是得从最上面开始取呀,很容易明白的。再来说说队列,队列的特征是先进先出,就是说先来的先走,生活中的例子就是排队买票,这个大家都很熟悉了,就是先买到票的人先走,后买到票的人后走。

       接下来就进入我们今天的主题,即如何用栈来实现队列?

      在这里我们可以通过两个栈来操作。第一个栈中存放入队列的元素,第二栈中存放出队列的元素,在这里我们定义两个栈,命名为:stack1 stack2

      首先我们可以将入队列的元素放在栈stack1中,如果要出队列的话,就先执行 stack1.push(stack1.pop()) ,这句代码就可以将stack1中的所有元素全部挪到stack2中,并且在stack2中,从栈顶到栈顶恰好就是元素进入队列的顺序,然后执行出队列的操作,即将stack2中的栈顶元素执行 pop() 操作,这时出栈的元素恰好就是出队列的元素。

    进行简单分析后,我就上代码了。

     1 package queue;
     2 
     3 import java.util.NoSuchElementException;
     4 import java.util.Stack;
     5 
     6 /**
     7  * 用两个栈来实现一个队列
     8  * @author liuxin
     9  *
    10  * @param <E>
    11  */
    12 public class QueueWithTwoStacks<E> {
    13     private Stack<E> stack1;    
    14     private Stack<E> stack2;    
    15 
    16     public QueueWithTwoStacks() {
    17         stack1 = new Stack<E>();
    18         stack2 = new Stack<E>();
    19     }
    20 
    21    
    22     
    23 
    24     public boolean isEmpty() {
    25         return stack1.isEmpty()&&stack2.isEmpty();
    26     }
    27 
    28 
    29     
    30     public int size() {
    31         return stack1.size()+stack2.size();   
    32     }
    33 
    34 
    35 
    36     public void enQueue(E item) {
    37         stack1.push(item);
    38     }
    39 
    40     public E deQueue() {
    41         if(stack1.isEmpty())
    42         {
    43             throw new NoSuchElementException("Queue is Empty!!");
    44         }
    45         
    46         if(stack2.isEmpty())
    47         {
    48             while(!stack1.isEmpty())
    49             {
    50                 stack2.push(stack1.pop());
    51             }
    52         }
    53         
    54         return stack2.pop() ;
    55     }
    56 
    57  }

    这就是我关于用栈实现队列的一些理解,若有疑问,可以留言。

  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/jie9608/p/6758669.html
Copyright © 2011-2022 走看看