java - 具有两个在 Pop 条件下失败的堆栈的 minstack 的实现

标签 java algorithm data-structures stack

我正在实现 minstack算法和一些奇怪的东西,也许我在这里遗漏了“一些堆栈概念”或“一些 Java 概念”。我正在使用两个堆栈(st 和 st2)来执行我的 minstack 操作。下面是我的 pop 方法,它在 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() 在方法 1 的状态下不起作用,而在存储 st.pop()< 的结果后在方法 2 中起作用的区别 到一个临时变量 a

最佳答案

如果我理解问题正确,st.pop() 在第一种方法中不起作用,因为 st 中的元素类型从未明确说明(即 st 可以像 Stack st = new Stack();).

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

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

关于java - 具有两个在 Pop 条件下失败的堆栈的 minstack 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147363/

相关文章:

algorithm - 精确图算法

c# - 是否存在具有以下二叉搜索树特征的.NET数据结构?

java - 屏幕更改后应用程序崩溃

java - Spring Boot REST Hibernate - 获取一个国家的所有城市

java - 如何在Spring集成中连接到远程MBean服务器

c++ - MaxDoubleSliceSum Codility 算法

c# - SVD算法实现

c# - 在节点和边列表中查找循环引用

java - 如何读取存储在 *.epf 文件中的数据

c - BST 中的中序遍历