Rhyme/剑指Offer Java 05 用两个栈实现一个队列Java版
2018-01-15 11:55
567 查看
剑指Offer Java 05 用两个栈实现一个队列Java版
package offer5; import java.util.Stack; /** * 用两个栈来实现一个队列, * 完成队列的push和pop操作 * * 思路: * * 运用栈的特性后进先出 * 那么如果我先将元素放入一个栈A中 * 那么将栈A中的元素pop并push进栈B中 * 那么在栈B执行pop操作, * 就和在队列中的到的结果相同了 * * @author RhymeChiang * @date 2018/01/15 **/ public class Offer5<E> { private Stack<E> stackIn; private Stack<E> stackOut; { stackIn = new Stack<>(); stackOut = new Stack<>(); } /** * 模拟队列的push操作 * <p> * 先将元素push进stackIn栈中 * 在判断stackOut栈中是否有元素 * <p> * 如果stackOut栈中有元素则不移动stackIn栈中的元素 * 执行pop操作的时候,pop stackOut栈中的元素 * <p> * 如果stackIn栈中没有元素则将stackIn中的所有元素pop, * 并push进stackOut栈中 * * @param e */ public void push(E e) { // 将元素先压入In栈 stackIn.push(e); // Out栈中元素为空 // 则将In栈中的元素全部pop // 并push进Out栈中 if (stackOut.empty()) { while (!stackIn.empty()) { stackOut.push(stackIn.pop()); } } // 如果Out栈中有元素,则不移动 } /** * 模拟队列的pop操作 * * @return */ public E pop() { // 如果Out栈为空 // 则将In栈的元素pop // 并push进Out栈中 if (stackOut.empty()) { while (!stackIn.empty()) { stackOut.push(stackIn.pop()); } } if (!stackOut.empty()) { return stackOut.pop(); } return null; } public static void main(String[] args) { Offer5<Integer> offer5 = new Offer5<>(); offer5.push(1); offer5.push(2); offer5.push(3); System.out.println(offer5.pop()); System.out.println(offer5.pop()); System.out.println(offer5.pop()); System.out.println(offer5.pop()); } }
测试结果:
相关文章推荐
- java-用两个栈实现队列&&用两个队列实现一个栈
- java两个栈实现一个队列
- 用两个队列实现一个栈 JAVA实现
- 两个队列实现一个栈 + 两个栈实现一个队列 Java
- java-用两个栈实现队列&&用两个队列实现一个栈
- 用两个栈实现一个队列 JAVA实现
- java-用两个栈实现一个队列
- 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- 用两个栈实现一个队列的功能,用Java实现
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- 【Java】用两个栈实现一个队列Myqueue类
- java 实现 两个栈实现一个队列的功能
- 《剑指Offer》用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。java
- 两个堆栈实现一个队列 , 利用两个队列实现一个堆栈(Java)
- 两个栈实现一个队列(java)
- 数据结构与算法分析(Java 语言描述)(36)—— 使用两个队列实现一个栈
- 剑指offer----用两个队列实现一个栈(java代码)
- Java用两个队列实现一个栈的功能
- 两个栈实现一个队列以及两个队列实现一个栈(Java)