对于页面的替换,有三种最基本的替换方法:FIFO,Optimal,LRU
FIFO是先进先出,将最早进的替换出去;
Optimal是最佳置换算法,将未来最久不会被用到的页面替换出去;但此算法需要有预见性;
LRU是将其中将最久未被使用过一个替换,Least Recently Used 。
(在前几天的考试里,差点就把LRU看成Optimal了,我的分分,幸好最后发现并改了)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct pages
{
int lastNumber;
int data;
};
int main()
{
//LRU 最久没被用到过:
struct pages page[200];
int referenceString[200];
int n;
while(true)
{
cin >> n ;
for(int i=0; i<n; i++)
{
cin >> page[i].data ;
page[i].lastNumber = i+1;
}
int m;
cin >> m;
for(int i = 0; i<m; i++)
{
cin >> referenceString[i] ;
}
for(int j= 0; j<m; j++)
{
int i;
for(i = 0 ; i<n; i++)
{
if(page[i].data==referenceString[j])
{
page[i].lastNumber = n + j + 1;
break;
}
}
if(i==n)
{
int minnumber = page[0].lastNumber;
int index = 0,k=1;
for( k = 1; k<n; k++)
{
if(page[k].lastNumber<minnumber){
minnumber = page[k].lastNumber;
index = k;
}
}
page[index].data = referenceString[j];
page[index].lastNumber = n+j + 1;
}
}
/*4
1 2 3 0
5
5 3 2 0 4*/
cout << "最后的顺序是:" << endl;
for(int k = 0; k<n; k++)
{
cout << page[k].data << "\t" ;
}
}
return 0;
}