我需要如何去解決這個問題,沒有過於複雜的任何進一步的一些普遍性的建議實施最近最少使用算法:遞歸:使用堆棧
使用數組(而不是一個鏈表) ,編寫一個類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