。。。。。。
#include<cstdio>
#include<iostream>
using namespace std;
typedef struct item
{
int num;
int time;
}Pro;
int pageNum;
int memoryNum;
void print(Pro *page1);
int Search(int num1,Pro *memory1);
int ans[100];
int main()
{
int cnt=0;
int i=0;
int curmemory;
int missNum=0;
float missRate;
Pro *page;
Pro *memory;
printf("输入系统分配给作业的主存中的页面数:");
scanf("%d",&pageNum);
printf("输入内存页面数:");
scanf("%d",&memoryNum);
page=(Pro *)malloc(sizeof(Pro) *pageNum);
memory=(Pro *)malloc(sizeof(Pro) *memoryNum);
for(i=0;i<pageNum;i++)
{
scanf("%d",&page[i].num);
page[i].time=0;
}
missNum=0;
curmemory=0;
printf("LRU页面置换情况: \n");
for(i=0;i<memoryNum;i++)
{
memory[i].num=-1;
memory[i].time=-1;
}
for(i=0;i<pageNum;i++)
{
int rec=Search(page[i].num,memory);
if(rec<0)
{
missNum++;
for(int j=0;j<memoryNum;j++)
if(memory[j].time==-1){ //刚开始没有插入的初始情况
curmemory=j;
break;}
else if(memory[j].time>memory[curmemory].time){
curmemory=j;
}
if (i>=memoryNum)
ans[cnt++]=memory[curmemory].num;
memory[curmemory].num=page[i].num; //内存块没有被赋值
memory[curmemory].time=0;
print(memory);
}
else memory[rec].time=0;
for(int j=0;j<memoryNum;j++)
if (memory[j].num!=-1)
memory[j].time++;
}
missRate=(float) missNum/pageNum*100 ;
missRate=(int) missRate;
printf("置换的序号是:\n");
for(int k=0;k<cnt;k++)
cout<<ans[k]<<‘ ‘;
cout<<endl;
printf("缺页次数:%d 缺页率: %.f%\n",missNum,missRate);
}
void print(Pro *memory1)
{
int j;
for(j=0;j<memoryNum;j++)
printf("%d ",memory1[j].num);
printf("\n");
}
int Search(int num1,Pro *memory1)
{
int j;
for(j=0;j<memoryNum;j++)
{
if(num1==memory1[j].num)
return j;
}
return -1;
}
/*输入 20
3
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 */
原文:https://www.cnblogs.com/572354941hnit/p/11961194.html