在弹出条件下失败的带有两个堆栈的minstack的实现

时间:2018-11-05 01:57:50

标签: java algorithm data-structures stack

我正在实现minstack算法,并且遇到了一些奇怪的事情,也许我在这里错过了“某些堆栈概念”或“某些Java概念”。我正在使用两个堆栈(st和st2)来执行我的minstack操作。下面是我的弹出方法,在if条件下失败:

方法1-失败:

public void pop() {
        if(st.pop() == st2.peek())
            st2.pop();
    }

下面是Pop方法,当我将st.pop()结果存储在变量'a'中时,它可以正常工作:

方法2-通过:

public void pop() {
    int a = st.pop();
    if(a == st2.peek())
        st2.pop();
}

请假设两个堆栈中都有整数元素,并且st.pop()中的值等于st2.peek()。我想了解为何st.pop()在将st.pop()的结果存储到临时变量a后,如果方法1的状态不能在方法1的状态下工作而在方法2可以工作的区别?

1 个答案:

答案 0 :(得分:2)

如果我理解正确的问题,则st.pop()在第一种方法中不起作用,因为从未明确声明st中的元素类型(即st可以像Stack st = new Stack();那样初始化)。 / p>

因此,任何对象(不必是int)都可以被压入堆栈,因此当弹出堆栈时,不清楚返回哪种数据类型,这将导致if语句失败。

在第二种方法中,将弹出的项目显式定义为变量a中的int,因此当与a进行比较时,if语句将按预期工作。