pop和isEmpty方法如何在Stack类中工作

时间:2015-12-21 19:51:01

标签: java

我正在阅读java中的堆栈。我找到了这段代码。我不明白isEmpty方法和pop方法..我在下面的代码中的每一行旁边评论过..你能告诉我pop和isEmpty方法吗? 感谢

  public class Stack {

    int [] sk = new int[5];
    int top =-1;

public static void main(String[] args) {    
    Stack s = new Stack();
    s.push(34);
    s.push(-44);
    s.push(7);

    while (!s.isEmpty())
    {
    System.out.println(s.pop());
    }
}

public int pop() {
    return sk[top--]; // what happens here? why not we use a for loop like for(int r=sk.length; r>0; r--) return sk[r];
}

public boolean isEmpty() {
    return (top==-1);      // why we return top==-1 , what is the purpose of it? should not we return sk[sk.length]==0; ?
}

public void push(int i) {
    sk[++top]=i;

}
}

3 个答案:

答案 0 :(得分:0)

“pop”=从堆栈中弹出顶部项目并将其返回

客户端代码使用

“isEmpty”来了解堆栈中是否还有其他项目。 (一个用例是循环while (myStack.isEmpty() == false) {}

top--在返回值后递减'top'变量。

++top在返回值之前递增'top'变量。

所以......如果你把一个新项目“推”到堆栈上,top变为0(之前)它返回用于将项目放入数组的值。

与push方法相反的是pop,其中top--用于在top方法返回0之后递减++的值。这使得top等于-1,这意味着堆栈为空。 (如果你'推'一个项目然后'弹出'一个项目

,就是这样

答案 1 :(得分:0)

top跟踪数组sk(堆栈指针)中的当前索引。编写此代码的人决定当top = -1时,这会将堆栈标记为空。这适用于pop函数...

pop返回堆栈顶部的当前项(sk[top]),并递减堆栈指针(top)。

答案 2 :(得分:0)

将堆栈视为桌面上的纸张。

使用push,您可以在堆栈顶部再放一张纸。

使用pop,您将带走最顶层的纸张。

使用isEmpty检查桌面上是否还有纸张。

...的sooo

public int pop() {
  //Take away the element at position top and then reduce top by one
  return sk[top--]; 
}

关于isEmpty的更多细节:

top是元素数组中的指针。只要此指向最低项目(具有值-1),堆栈就被视为空。

==是等号运算符,因此(top == -1)的结果为boolean。它的true如果顶部指针指向-1,则为false

public boolean isEmpty() {
  //the top-most item is desk-level: No more items.  
  //Arrays in Java are 0-based, so there is no array element at -1
  return (top==-1);
}