Java 实现堆栈&x27;带递归的s-Pop方法

Java 实现堆栈&x27;带递归的s-Pop方法,java,recursion,stack,Java,Recursion,Stack,我在自学java。过去几天我一直在研究数据结构。我正在读《Java中的数据结构和算法》一书。有一个练习我有问题。它要求用递归实现pop方法,这样当调用该方法时,它应该立即删除所有项。有人能帮忙吗?如果你能给我一点建议,我将不胜感激。谢谢(以下是当前实现的pop方法) 您需要考虑堆栈中没有任何内容的基本情况,即stack.pop()==null 对于递归情况,非常直观,因为您只需要递归调用pop(),直到满足基本情况。反复调用pop(),直到堆栈结束。 由于您没有提到数据的存储方式,因此无法帮助您

我在自学java。过去几天我一直在研究数据结构。我正在读《Java中的数据结构和算法》一书。有一个练习我有问题。它要求用递归实现pop方法,这样当调用该方法时,它应该立即删除所有项。有人能帮忙吗?如果你能给我一点建议,我将不胜感激。谢谢(以下是当前实现的pop方法)


您需要考虑堆栈中没有任何内容的基本情况,即
stack.pop()==null

对于递归情况,非常直观,因为您只需要递归调用
pop()
,直到满足基本情况。

反复调用
pop()
,直到堆栈结束。
由于您没有提到数据的存储方式,因此无法帮助您提供代码

首先,您应该了解如何实现此方法的非递归对应项

它可以是这样的:

public void popAll() {

  while(!stack.isEmpty()) {
      stack.pop();
  }
}
一旦理解了这一点,递归版本应该很容易:

public void popAllRecursive() {

     if(stack.isEmpty()) {
        //nothing to remove, return
        return;
     }
     stack.pop();  // remove one stack element

     popAllRecursive(); // recursive invocation of your method

}

因为它是一个练习,我只是提供了一个想法并把实现留给你(你可以考虑在类堆栈中提供方法,并使用顶层计数器和StaskRoad)堆栈的实现。


希望这有帮助

谢谢大家,我解决了问题。不知道是否有效,但我喜欢下面的内容:

    public void pop()
{

    if(isEmpty()){

        return;
    }

    if (top>=0){

        stackArray[top] = stackArray[top--];
        pop();
    }


}

您需要从pop中调用pop。到目前为止,我所做的是尝试将该方法更改为类似于此pop(int Top)的方法,其中“Top”是指堆栈上的最后一项。然后递归调用它。它的基本情况是Top==-1,但不起作用。在google上键入关键字-
“Recursion”进行搜索
。你会发现很多例子..它不是特定于编程语言的..因此,你不必担心语言..在实现之前,你应该在笔记本上体验一下
递归..@Deewanagan..这没有意义..因为pop()只用于弹出顶部元素..你不需要传递它..
pop()
不应接受任何参数..是的,但我的问题是如何再次调用它,我的意思是我需要以某种方式更改指针顶部(减少它),对吗?我无法这样做,我认为您应该执行类似以下操作:
if(baseCase)return;else System.Out.println(stack.pop());
将整个块放在
pop
方法中,以便重复调用它,直到达到基本大小写为止。数据存储在数组中,因此需要调用
pop()
直到数组为空:)
    public void pop()
{

    if(isEmpty()){

        return;
    }

    if (top>=0){

        stackArray[top] = stackArray[top--];
        pop();
    }


}