栈队列例题3:使用两个栈实现一个队列

思路:

  使用两栈实现一个队列,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 }

 

结果:

 

转载于:https://www.cnblogs.com/LgxBoKeYuan/p/10220123.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值