LRU算法

。。。。。。

#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 */  

  

posted @ 2019-11-30 02:34  liter_wave  阅读(137)  评论(0编辑  收藏  举报