Garwick的算法是一种处理堆栈溢出的算法。我知道原始算法是什么以及它是如何工作的。然而,有一个改进的Garwick算法,我对它的描述非常模糊,甚至堆栈在左方向上增长,而奇数堆栈在正确的方向上#34;。
我的讲义中的修改算法的说明如下,也很模糊。
有谁可以帮助提供有关此修改算法的更多详细信息,或提供一些参考?谢谢!
答案 0 :(得分:1)
如果你需要在数组中放置2个堆栈,那么你可以在数组的开头放置一个堆栈,在推送元素时向上增长,在结束时向下增长,向下增长。
这样,当其中一个填满时,您不必担心重新分配可用空间,因为它们都使用相同的可用空间,您可以自由地推送到 堆叠,直到整个阵列都满了。
您引用的修改后的Garwick算法将此想法扩展到2个以上的堆栈。使用原始的Garwick算法,阵列被分成N个段,每个段有一个堆栈,所有堆栈都在相同的方向上增长。在修改后的版本中,数组被划分为N / 2个段,每个段都有 2 堆栈,一个从段的开头向上增长,另一个从末尾向下增长。
在修改后的算法中,当一个段填满时,自由空间在段(堆栈对)之间重新分配,其方式与原始算法在单个堆栈之间重新分配空间的方式相同。