C++实现LRU算法

C++实现LRU算法,第1张

#include<iostream>

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//加入新数据

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12543005.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存