0

我是JAVA n00b。我正在尝试在 Java 中实现堆栈数据结构。push、peek 和 display 的算法运行良好。该pop算法未按预期工作:

public int pop() {
    int temp;
    if(isEmpty())
        return -1;
    else {
        temp = arr[topElem];
        topElem--; // points to the top most element in the stack
        count--;   // keeps track of the total number of elements in the stack
        return temp;
    }
}

该算法的caseinswitch语句如下:-

case 2:
    if(st.pop()==-1)
        System.out.println("The stack is empty.");
    else
        System.out.printf("The element popped is %d\n",st.pop());
    break;

如果输入的元素是(按该顺序):- 1 2 4 那么在第一次调用时pop,弹出 2,然后只有 1 留在堆栈中。我能够理解可能有什么问题,但无法在代码中查明它。

4

2 回答 2

3

问题是您调用pop了两次(一次在 中st.pop() == -1,一次在 中printf)。

您应该将代码更改为:

int value = st.pop();
if (value == -1)
   System.out.println("The stack is empty.");
else
   System.out.printf("The element popped is %d\n", value);
于 2013-10-28T15:28:52.133 回答
0

你打电话给pop两次。

第一个是:

if(st.pop()==-1)
       System.out.println("The stack is empty.");

第二个是:

System.out.printf("The element popped is %d\n",st.pop());

您可以使用变量来存储的值,st.pop()然后检查变量的值。接下来写一些逻辑代码。

于 2013-10-28T15:46:45.180 回答