我是自学java。我一直在研究过去几天的数据结构。我正在阅读“Java中的数据结构和算法”一书。有一个练习,我有问题。它要求使用递归实现pop方法,以便在调用方法时,它应该一次删除所有项。任何人都可以帮忙吗?关于如何做到这一点的指针将非常感激。谢谢。 (以下是当前实施的pop方法。)
public double pop() // take item from top of stack
{
return stackArray[top--]; // access item, decrement top
}
答案 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();
}
}