lru算法c语言程序编码,最久未使用算法(LRU)C语言实现

使用操作系统中内存管理知识解析该算法。

代码解析:

全局变量:

stack//栈

visit_pages//访问轨迹

函数:

print_stack()//打印栈内情况

change_stack()//移动栈内元素

主函数:

套用一个双重for循环。

外层for:遍历访问轨迹visit_pages。

内层for:遍历栈stack。

内层for中含有一个if,和一个if,else if。

其中,if判断栈元素stack[j]是否为NULL,如果为NULL则直接将visit_pages[i]入栈到stack[j]。

另外,if,else if中,if判断栈stack[j]是否与visit_pages[i]相同,若相同,则从stack[j]之后往前覆盖,最终将visit_pages[i]赋值给stack[4]。else if判断栈内没与visit_pages[i]相同的元素,则从第stack[0]之后栈内元素往前覆盖, 最终visit_pages[i]赋值给stack[4]。

内存根据访问轨迹:3 5 0 5 1 0 8 2 5 1 3。

代码:

#include #include #include // 全局变量

char stack[5] ={0}; //栈

char visit_pages[11] = {'3', '5', '0', '5', '1', '0', '8', '2', '5', '1', '3'}; //访问轨迹

// 打印栈元素

void print_stack()

{

int m;

// 打印栈元素

for (m=0; m<5; m++) {

if (stack[m] == NULL) {

printf(" N");

} else {

printf(" %c", stack[m]);

}

}

printf("\n\n");

}

//移动栈值

void change_stack(int index, int i)

{

int temp, k;

//将栈底元素保存后,依次往前覆盖

temp = stack[index];

for (k=index; k<5; k++) { //相等下标值之后,往前覆盖

if (index != 0) {//只有当栈不满时,可直接跳出循环

if (stack[k+1] == NULL) {

break;

}

}

if (k+1 < 5) {

stack[k] = stack[k+1];

}

}

// 两种不同情况使用不同赋值

if (index != 0) {

if (k == 5) {

k = 4;

}

stack[k] = temp; //冒泡到顶部

stack[k] = visit_pages[i]; //替换顶部值

} else {

stack[4] = temp; //冒泡到顶部

stack[4] = visit_pages[i]; //替换顶部值

}

}

int main()

{

int i, j, k;

int index; //下标

int temp; //值中间量

//栈赋值

for (i=0; i<5; i++) {

stack[i] = NULL;

}

printf("栈底->栈顶: \n");

print_stack(); //初始栈打印

for (i=0; i%c:\n", visit_pages[i]);

print_stack();

}

return 0;

}

结果:

57ba7f9f5ecb11b9d7e453d41e120756.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值