using namespace std
int size
int *w
//定逗唯灶义一个动态数组
struct mem
{
int num
int count
}memBlock[3]={0,0,0,0,0,0}
void LRU()
{
for( int i = 0i <sizei++ )
{
int maxCount = memBlock[0].count
int maxPos = 0
int j = 0
bool bFind = false
for( j = 0j <3j++ )
{
// 标记出count值最山扮大的位置
if( maxCount <memBlock[j].count )
{
maxCount = memBlock[j].count
maxPos = j
}
// 将所有的count值都+1
memBlock[j].count++
// 如果命中,将其count值置为0
if( w[i] == memBlock[j].num )
{
memBlock[j].count = 0
bFind = true
}
}
// 未命中,将count最大的拿来替换
if( !bFind )
{
memBlock[maxPos].num = w[i]
memBlock[maxPos].count = 0
}
for(j = 0j <3j++) //输出
cout <<memBlock[j].num <<" "
cout <<" "<<endl
}
}
int main() //主函数
{
cout<<"请输入需访问的页面数量:"<<endl
cin>>size
w = new int[size]
cout<<"请输入需要访问的页面"<<endl
for(int a=0a<sizea++)
{
cin>>w[a]/山空/输入数组
}
cout<<endl<<"(LRU)"<<endl
LRU()
return 0
}
引用 : 回答者: floxer | 三级
#include <stdio.h>#include <conio.h>
#include <stdlib.h>
#define MAINMEM 3//主存可存储的页面个数
#define QUEUEMAXLEN 30 //队列最大长度
struct LRUQueue //定义一个特殊的队列
{
int number
int data[MAINMEM]
}lru
void Init()//初始化 *** 作
void Add(int pageID) //加入队列
int Find(int pageID) //查找页面是否在主誉肆首存中
void Update(int pos) //更新页所在的地址
void PrintQueue() //输出主存内容
int main()
{
int i
int queuelength
int queue[QUEUEMAXLEN]
Init() //初始化 *** 作
printf("请输入队列的长度:")
scanf("%d",&queuelength)
printf("请以此输入队列的页号:")
for(i=0i<queuelengthi++)
{
scanf("%d",&queue[i])
Add(queue[i])
PrintQueue()
}
system("pause")
return 0
}
void Init()
{
lru.number = 0
int i
for(i = 0i<MAINMEMi++)
{
lru.data[i] = -1
}
}
int Find(int pageID)
{
int i
for (i=0i<MAINMEMi++)
{
if(lru.data[i] == pageID)
{
return i
}
}
return 0
}
void Update(int pos)
{
int tmp = lru.data[pos]
int i
for(i = posi<lru.number++i)
{
lru.data[i] = lru.data[i+1]
}
lru.data[lru.number-1] = tmp //将被访问的页放在最后一位,其他的页前移,因为置换时删掉的是主存中第一块放置的页面
}
void PrintQueue()
{
printf("当前内存中的页号:\n")
int i
putch('|')
for(i = 0i<MAINMEMi++)
{
if(lru.data[i] == -1)
printf(" |")
else
printf("%d |",lru.data[i])
}
putch('\n')
}
void Add(int pageID)
{
printf("当前访问的页面:%d\雹握n",pageID)
if(lru.number<MAINMEM) //如果主存没庆数有填满
{
int pos = Find(pageID)
if(pos)
{
Update(pos)
}
else
{
lru.data[lru.number++]=pageID
}
}
else
{
int pos = Find(pageID)
if(pos)
{
Update(pos)
}
else
{
int i
for(i=0i<MAINMEM-1i++)
{
lru.data[i]=lru.data[i+1] //数据左移一个单位
}
lru.data[i]=pageID//加入新数据
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)