每天一个算法之两栈实现队列

实现原理:

栈是先进后出,队列是先进先出。两个栈,一个先进后出的数据先放到另一个栈,再弹出就符合先进先出。



public class stacktoque {
public static void main(String args[]){
int[] arr=new int[]{1,3,2,4,6,7};
Que q=new Que(arr);
q.put();
q.put();
q.put();
q.put();
System.out.println(q.get());
System.out.println(q.get());
}
static class Que{
Stack s1;
Stack s2;
int[] arr;
int i=0;
public Que(int[] arr) {
super();
s1 = new Stack();
s2 = new Stack();
this.arr = arr;
}
public void put(){
s1.push(arr[i++]);
}
public int get(){
/*
* 这个地方是核心,出队列的时候,需要把s1的数据放到上s2上。才能保证先进先出。
* 但是为了避免s1多次出栈覆盖掉s2栈顶,因此,必须等到s2弹完才可以再次加入
*/
while(!s1.isEmpty()&&s2.isEmpty()){
s2.push(s1.pop());
}
return (int) s2.pop();
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值