思路:

  使用两栈实现一个队列,stack1栈是用来push的,当要pop时,需要先把stack1栈的数据pop出来,用stack2栈push接收,这样就实现了反转,然后再将stack2栈中pop一下,就实现了犹如队列的出队操作。进行入栈时,再把stack2中的数据pop出来,用stack1栈push接收,然后stack1再push一下新进来的元素即可;

  

代码如下:

 1 import java.util.Stack;
 2 
 3 public class QueueByTwoStacks<T> {
 4     private Stack<T> stack1=new Stack<T>(); //入栈时使用此栈
 5     private Stack<T> stack2=new Stack<T>(); //出栈时使用此栈
 6     
 7     public void enQueue(T element)
 8     {
 9         if(!stack2.isEmpty())
10         {
11             move(stack2,stack1);
12         }
13         stack1.add(element);
14     }
15     
16     public T deQueue() 
17     {
18         T value;
19         if(!stack1.isEmpty())
20         {
21             move(stack1,stack2);
22             value=stack2.pop();
23         }else {
24             value=stack2.pop();
25         }
26         return value;
27     }
28     // 两个栈的互相转换
29     public void move(Stack<T> stackOne,Stack<T> stackTwo)
30     {
31         while(!stackOne.isEmpty())
32         {
33             stackTwo.push(stackOne.pop());
34         }
35     }
36     
37 }

 

测试代码:

 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         QueueByTwoStacks<String> qts=new QueueByTwoStacks<String>();
 5         qts.enQueue("one");
 6         qts.enQueue("two");
 7         qts.enQueue("three");
 8         qts.enQueue("four");
 9         qts.enQueue("five");
10         System.out.println(qts.deQueue());
11         System.out.println(qts.deQueue());
12     }
13 
14 }

 

结果:

 

内容来源于网络如有侵权请私信删除