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