`
pxuxian
  • 浏览: 5938 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用两个栈实现一个队列 MyQueen

阅读更多
MyStack 见:http://pxuxian.iteye.com/blog/2031288

/**
 * 使用两个栈实现一个队列, 方法:在一个栈进行入队操作,出队时把栈里的数据移到另外一个栈,在另外那个栈进行出操作
 *
 * @author xuxianpan
 */
public class MyQueen<V> {

    private MyStack<V> stack1 = new MyStack<V>();
    private MyStack<V> stack2 = new MyStack<V>();

    public boolean isEmpty() {
        return stack1.isEmpty() && stack2.isEmpty();
    }

    public void push(V v) {
        // 在栈1进行入操作
        // 还原数据栈2数据到栈1
        if (!stack2.isEmpty()) {
            V oldV = stack2.pop();
            while (oldV != null) {
                stack1.push(oldV);
                oldV = stack2.pop();
            }
        }
        stack1.push(v);
    }

    public V pop() {
        // 在栈2进行出操作
        // 栈1不为空, 把栈1的数据移到栈2
        if (!stack1.isEmpty()) {
            V v1 = stack1.pop();
            while (v1 != null) {
                stack2.push(v1);
                v1 = stack1.pop();
            }
        }
        return stack2.pop();
    }

    public static void main(String[] args) {
        MyQueen<String> queen = new MyQueen<String>();
        queen.push("a");
        queen.push("b");
        queen.push("c");
        System.out.println(queen.pop());
        System.out.println(queen.pop());
        System.out.println(queen.pop());
        System.out.println(queen.pop());
        System.out.println(queen.pop());

        queen.push("d");
        queen.push("e");
        queen.push("f");
        System.out.println(queen.pop());
        System.out.println(queen.pop());
        System.out.println(queen.pop());
        System.out.println(queen.pop());

    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics