我需要如何去解决这个问题,没有过于复杂的任何进一步的一些普遍性的建议实施最近最少使用算法:递归:使用堆栈
使用数组(而不是一个链表) ,编写一个类StackType的成员函数,在引用页面时更新堆栈。假设一个堆栈,可容纳5个值和接下来的页面引用为7,则:
- 功能搜索栈7页
- 如果发现7,在顶部
从堆栈,并把它删除它:堆栈void updateRecursive(StackType<Type>& s, Type t);
使用以下驱动程序功能的顶部
如果就是没有在列表中找到7,在堆栈中引用的最后一个页面被删除,7位 调用递归函数
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);
}
所以这是很大的,我称之为主要功能如下,我搜索了7,发现它:
firstStack.updateRecursive(firstStack, 7);
现在我在做什么得太多是怎么走有关实现更换号码的回压入堆栈:
存储每个我突然到一个数组,遍历每个项目的项目,然后把它们放回到堆栈中的每个实例
手动推项背到堆栈,但在事件,这将不是真正的工作,7并没有在列表中
存在我不知道如果有一个更简单的方法处理搜索并在堆栈为数组时进行替换?
你应该在你'updateRecursiveDo'方法'else'块添加一个return语句。 – Holt