两个栈实现一个队列_算法总结:左神class3—两个栈实现队列结构

如何仅用栈结构实现队列结构?

使用两个栈(一个压入栈,一个弹出栈)实现一个队列。要注意在弹出元素栈的地方要注意栈的变化,每次压入栈中的元素移动到弹出栈时,要全部移动。当弹出栈中有元素的时候,不能从压入栈中移动元素到弹出栈中。

c69e6995c0d057a00c1c4a2e2fe9b56c.png

1 一个pop栈、一个push栈;数据都进入push栈里;

2 需要开始出队列的时候,将push栈里的所有数都倒入pop栈中,然后pop栈出栈即可

3 如果再输入数据,则还是压入push栈里

4 注意,倒数据的前提1是pop栈为空,否则顺序出错。

5 注意,倒数据的前提2是一次倒完.

public static class TwoStacksQueue {    private Stack stackPush;    private Stack stackPop;    public TwoStacksQueue() {      stackPush = new Stack();      stackPop = new Stack();    }    public void push(int pushInt) {      stackPush.push(pushInt);    }    public int poll() {      if (stackPop.empty() && stackPush.empty()) {        throw new RuntimeException("Queue is empty!");      } else if (stackPop.empty()) {        while (!stackPush.empty()) {          stackPop.push(stackPush.pop());        }      }      return stackPop.pop(); //之前的判断和循环主要是为了确保pop栈里的正确    }    public int peek() {      if (stackPop.empty() && stackPush.empty()) {        throw new RuntimeException("Queue is empty!");      } else if (stackPop.empty()) {        while (!stackPush.empty()) {          stackPop.push(stackPush.pop());        }      }      return stackPop.peek();    }                public void dao(){       if(lstackPop.isEmpty() {        return;        }       while(!stackPush.isEmpty()){                 stackPop.push(stackpush.pop());             }       }  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值