【问题标题】:Implementing Stack's Pop method with Recursion使用递归实现 Stack 的 Pop 方法
【发布时间】:2012-09-30 13:25:44
【问题描述】:

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

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


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

【问题讨论】:

  • 你需要从pop内部调用pop。
  • 到目前为止,我所做的是尝试将方法更改为类似 pop(int Top) 的方法,其中“top”指的是堆栈上的最后一项。然后递归调用它。有一个类似于 top == -1 的基本情况,但它不起作用。
  • 通过输入关键字在 google 上搜索 - "Recursion".. 你会发现很多例子.. 它不是特定于编程语言的.. 所以,你不必担心语言......在实施之前,您应该在笔记本上感受一下Recursion..
  • @Deewanagan.. 没意义.. 因为 pop() 仅用于弹出顶部元素.. 你不需要传递它.. pop() 不应该带任何参数..

标签: java recursion stack


【解决方案1】:

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

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

【讨论】:

  • 是的,但我的问题是如何再次调用它,我的意思是我需要以某种方式更改指针顶部(递减它)对吗?我做不到
  • 我认为您应该这样做:if(baseCase) return; else System.Out.println(stack.pop()); 将整个块放入您的 pop 方法中,以便重复调用它,直到遇到基本情况。
【解决方案2】:

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

【讨论】:

  • 数据存储在一个数组中
  • 所以你只需要调用pop() 直到数组为空:)
【解决方案3】:

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

可能是这样的:

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 类中提供方法并使用顶部计数器和 stackArray - 您的堆栈的实现。

希望对你有帮助

【讨论】:

    【解决方案4】:

    谢谢大家,我解决了这个问题。不知道是否有效,但我确实喜欢以下内容:

        public void pop()
    {
    
        if(isEmpty()){
    
            return;
        }
    
        if (top>=0){
    
            stackArray[top] = stackArray[top--];
            pop();
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2018-09-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 2021-12-06
      • 2015-12-01
      相关资源
      最近更新 更多