70,020
社区成员




/************************************************************************/
/* 实现LRU算法:
每次换掉a[i - 3 -num], a[i - 3 - num]就是从前向后的第3个最后访问的元素,因为中间可能有相同的,
故减去num。 */
/************************************************************************/
#include <stdio.h>
#define SUM_NUM 20
int FindIndex(int *BLCOK, int BLOCK_NUM, int data) //查找缓冲块中指定页面的下标
{
int i;
for (i = 0; i < BLOCK_NUM; i ++)
{
if (BLCOK[i] == data)
{
return i;
}
}
return -1;
}
int main()
{
int a[20] = {7, 0, 1, 2, 0, 3, 0, 4, 2,
3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1};
int BLOCK[3]; //缓冲块的存储
int i;
int change_num = 0; //记录换页之间的次数
int index;
int num = 0; //记录两次换页之间的命中次数
/*for (i = 0; i < 20; i ++)
{
scanf("%d", &a[i]);
}*/
for (i = 0; i < 3; i ++)
{
BLOCK[i] = a[i];
}
for (i = 3; i < 20; i ++)
{
if (FindIndex(BLOCK, 3, a[i]) != -1)
{
num ++; //记录两次换页之间的命中次数
continue;
}
//a[i - 3 - num]就是从前向后的第3个最后访问的元素,因为中间可能有相同的, 故减去num
index = FindIndex(BLOCK, 3, a[i - 3 - num]);
if (index != -1)
{
change_num ++;
num = 0;
BLOCK[index] = a[i];
}
}
printf("置换次数为%d,命中次数为%d\n", change_num, 20 - 3 - change_num);
return 0;
}