用递归实现Stack的Pop方法

时间:2012-10-10 06:23:03

标签: java recursion stack pop

我是自学java。我一直在研究过去几天的数据结构。我正在阅读“Java中的数据结构和算法”一书。有一个练习,我有问题。它要求使用递归实现pop方法,以便在调用方法时,它应该一次删除所有项。任何人都可以帮忙吗?关于如何做到这一点的指针将非常感激。谢谢。 (以下是当前实施的pop方法。)

    public double pop() // take item from top of stack
{


        return stackArray[top--]; // access item, decrement top
}

4 个答案:

答案 0 :(得分:4)

首先,您应该了解如何实现此方法的非递归副本。

可能是这样的:

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

}

由于它是一个练习,我只是给你一个想法并将实现留给你(你可以考虑在Stack类中提供方法并使用top计数器和stackArray - 你的栈的实现。

希望这有帮助

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

谢谢每一个人,我解决了这个问题。不知道是否有效,但我确实如下:

    public void pop()
{

    if(isEmpty()){

        return;
    }

    if (top>=0){

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


}