【发布时间】:2016-07-15 01:45:50
【问题描述】:
我需要一些关于如何解决这个问题的一般建议,而不会使问题变得过于复杂:
使用数组(而不是链表),编写 StackType 类的成员函数,该函数在引用页面时更新堆栈。假设一个堆栈可以容纳 5 个值,并且引用的下一页是 7,那么:
- 函数在堆栈中搜索第 7 页
- 如果找到 7,则将其从堆栈中删除并放在顶部
- 如果 is 在列表中没有找到 7,则在堆栈中引用的最后一页被删除,并在堆栈顶部放置 7 个位置
使用以下驱动函数:
void updateRecursive(StackType<Type>& s, Type t);调用递归函数
bool updateRecursiveDo(StackType<Type>& s, Type t);
到目前为止我所做的,我只会包括相关的功能:
我使用 LRU 算法的概念来理解这里要问的内容。
我知道我真正可以使用的唯一工具是推送和弹出。
RE:驱动函数的概念,我一直把它理解为我的 main() 程序。即调用函数的程序通常在测试的情况下完成,但根据他们提供给我的内容,我在教科书中查找了这个细节,发现公共驱动程序函数将用于调用私有递归函数以保持不。公共函数中的参数数量降至最低。
class StackType {
public:
void updateRecursive(StackType<Type>& s, Type t);
private:
bool updateRecursiveDo(StackType<Type>& s, Type t);
}
template <class Type>
bool StackType<Type>::updateRecursiveDo(StackType<Type>& s, Type t) {
if (isEmptyStack())
return 0;
else if(s.top() == t) {
return 1;
}
else {
s.pop();
updateRecursiveDo(s,t);
}
}
template <class Type>
void StackType<Type>::updateRecursive(StackType<Type>& s, Type t) {
updateRecursiveDo(s,t);
}
所以这很好,我在 main 中调用函数如下,我搜索了 7 并找到了它:
firstStack.updateRecursive(firstStack, 7);
现在我正在做的是过度思考如何将数字替换回堆栈:
将我弹出的每个项目存储到一个数组中并遍历每个项目,然后在每个实例中将它们推回堆栈
手动将项目推回堆栈,但如果列表中不存在 7,这将不起作用
我不确定当堆栈是数组时是否有更简单的方法来处理搜索和替换?
【问题讨论】:
-
您应该在
updateRecursiveDo方法的else块中添加一个return 语句。