美文网首页
算法题6.用两个栈实现队列

算法题6.用两个栈实现队列

作者: 12313凯皇 | 来源:发表于2019-07-29 20:48 被阅读0次

题目描述:

用两个栈来实现一个队列,完成队列的PushPop操作。 队列中的元素为int类型。

核心思想就是利用栈的性质,栈的数据是先进后出,而队列是先进先出。只要明白这两点,实现起来就不难,首先是本人的暴力破解,使用了两个stack对象,stack1用来存储数据,stack2用来辅助取数据:

import java.util.EmptyStackException;
import java.util.Stack;

/**
 * Created by HY
 * 2019/7/29 20:21
 * <p>
 * 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
 */
public class Solution{

    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    public void push(int node) {
        stack1.push(node);
    }

    public int pop() {

        //先将数据翻转并转移到statck2中
        while (!stack1.isEmpty()) {
            stack2.push(stack1.pop());
        }

        //栈为空时抛出异常
        if (stack2.isEmpty())
            throw  new EmptyStackException();

        //取出第一个数
        int result = stack2.pop();

        //还原
        while (!stack2.isEmpty()) {
            stack1.push(stack2.pop());
        }
        return result;
    }
 
}

完美通过,但是这种办法效率上肯定是有问题的,于是去评论区逛了逛,发现了一种优化方案,就是当push操作的时候再将stack2还原回去,否则直接从stack2中取顶部元素就可以了:

//push的时候再把stack2还原回stack1
public void push(int node) {
    //先还原
    while (!stack2.isEmpty()) {
        stack1.push(stack2.pop());
    }
    stack1.push(node);
}

public int pop() {
    //将数据翻转转移到stack2
    while (!stack1.isEmpty()) {
        stack2.push(stack1.pop());
    }

    if (stack2.isEmpty()) {
        throw new EmptyStackException();
    }

    //返回第一个数
    return stack2.pop();
}

相关文章

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 剑指offer-5~10

    5.用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 6.旋转...

  • leecode刷题(26)-- 用栈实现队列

    leecode刷题(26)-- 用栈实现队列 用栈实现队列 使用栈实现队列的下列操作: push(x) -- 将一...

  • 2019-03-14

    【编程题】 用两个栈实现队列 【剑指系列】用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为...

  • JZ-005-用两个栈实现队列

    用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题...

  • 算法题6.用两个栈实现队列

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 核心思想就是利用...

  • 用两个栈实现队列

    原题链接 用两个栈实现队列 题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int...

  • 队列之-队列实现栈

    一、队列实现栈核心算法概述 之前已经描述过了用栈实现队列的功能,见栈系列之-实现队列,那么同样队列也可以用来实现栈...

  • 面试题9: 用两个栈实现队列

    9-1 用两个栈实现队列 9-2 用两个队列实现栈

  • 栈&队列

    一、栈&队列总结 栈/队列的应用接雨水验证栈序列滑动窗口的最大值 栈/队列的特殊实现用两个栈实现队列用两个队列实现...

网友评论

      本文标题:算法题6.用两个栈实现队列

      本文链接:https://www.haomeiwen.com/subject/lswirctx.html