在学习很多服务器软件中,当内存不够,而需要淘汰内存的时候,一般会使用LRU算法,便产生了浓厚的兴趣。在学习操作系统的过程中发现LRU在系统中用寄存器和栈来实现。所以我就尝试着学习用栈来解决LRU的问题。当然也参考了别人的代码。

 //stack.h

 typedef struct{
int List[MaxSize];
int top;
}Ustack; void iniStack(Ustack *s)
{
int i;
for(i=;i<MaxSize;i++)s->List [i]=-;
s->top =;
} int isFull(Ustack s)
{
if(s.top==MaxSize)return ; //已满,返回1
else return ; //未满,返回0
} int notEmpty(Ustack s)
{
if(s.top ==)return ; //空,返回0
else return ; //非空,返回1;
} int pushElm(Ustack *s,int x)//元素入栈,将x压入s栈顶。
{
if( isFull(*s) )return ;//如果栈已慢,则压栈失败。
else s->List[s->top++]=x;
return ; //压栈成功。
} int deleteElm(Ustack *s,int site)
{ int i;
if( notEmpty(*s) ) //如果栈非空,则可以删除元素
{
for(i=site;i< s->top-;i++)
s->List[i]=s->List[i+];
s->top--;
s->List[s->top]=-;
return ; //删除第site位置元素成功。
}
return ; //栈已空,删除元素失败。
} int isInStack(Ustack s,int x)
{ int i;
for(i=;i<s.top-;i++)
if(s.List[i]==x)return i; //如果栈中有x,返回x的位置
return -; //如果栈中没有x,返回-1;
} //栈是否非空,无关紧要。 void stackPrt(Ustack s) //打印栈的状态。
{ int i;
for(i=;i<s.top;i++)
printf("%3d",s.List[i]);
for(i=s.top;i<MaxSize;i++) //栈的空位置用“*”代替输出。
printf(" *"); }

mainlru.cpp

 #define MaxSize 5
#include<stdio.h>
#include"stack.h" void main()
{
int i,n,x,site,count=;
int test[];
Ustack mystack;
iniStack(&mystack);
printf("输入序列元素数目:");
scanf("%d",&n);
printf("输入含有%d个页面的序列:",n);
for(i=;i<n;i++){
scanf("%d",&x);
test[i]=x;
}
printf("\n_____栈状态_____访问页号__累计换页次数\n"); for(i=;i<n;i++){
site=isInStack(mystack,test[i]);
if(site==-&&isFull(mystack)){site=;count++;}
if(site!=-)deleteElm(&mystack,site);
pushElm(&mystack,test[i]);
stackPrt(mystack);
printf(" %d",test[i]);
printf(" %d\n",count);
}
}

LRU 算法简单实现的更多相关文章

  1. 使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法

    一,LRU算法介绍 LRU是内存分配中“离散分配方式”之分页存储管理方式中用到的一个算法.每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中,发现某页面不在物理内 ...

  2. 简单LRU算法实现缓存

    最简单的LRU算法实现,就是利用jdk的LinkedHashMap,覆写其中的removeEldestEntry(Map.Entry)方法即可,如下所示: java 代码 import java.ut ...

  3. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  4. 缓存淘汰算法--LRU算法

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也 ...

  5. LinkedHashMap 和 LRU算法实现

    个人觉得LinkedHashMap 存在的意义就是为了实现 LRU 算法. public class LinkedHashMap<K,V> extends HashMap<K,V&g ...

  6. LRU算法实现

    JDK中的实现 在JDK中LinkedHashMap可以作为LRU算法以及插入顺序的实现,LinkedHashMap继承自HashMap,底层结合hash表和双向链表,元素的插入和查询等操作通过计算h ...

  7. LRU算法总结

    LRU算法总结 无论是哪一层次的缓存都面临一个同样的问题:当容量有限的缓存的空闲空间全部用完后,又有新的内容需要添加进缓存时,如何挑选并舍弃原有的部分内容,从而腾出空间放入这些新的内容.解决这个问题的 ...

  8. 使用guava实现找回密码的tokenCache以及LRU算法

    源码包的简单说明: com.google.common.annotations:普通注解类型. com.google.common.base:基本工具类库和接口. com.google.common. ...

  9. 【算法】—— LRU算法

    LRU原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. 实现1 最常见的 ...

随机推荐

  1. hadoop 2.0 详细配置教程(转载)

    转载: http://www.cnblogs.com/scotoma/archive/2012/09/18/2689902.html 作者:杨鑫奇 PS:文章有部分参考资料来自网上,并经过实践后写出, ...

  2. IntelliJ IDEA安装 一些配置

    idea 配置修改 本篇 参考https://blog.liyang.io/234.html. 1.修改IDEA菜单的字体大小: 单击File | Project Structure菜单项,打开Pro ...

  3. 约瑟夫问题(Josephus Problem)的两种快速递归算法

    博文链接:http://haoyuanliu.github.io/2016/04/18/Josephus/ 对,我是来骗访问量的!O(∩_∩)O~~ 约瑟夫问题(Josephus Problem)也称 ...

  4. iOS中ASI和AFN的区别

    一.底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高 ...

  5. 页游AS客户端架构设计历程记录

    以下是一个只用JAVA做过服务器架构的程序员做的AS客户端架构,希望大家能推荐好的框架和意见,也求AS高程们的引导,等到基本功能成形后,低调开源,框架可以支持一个中度型页游的开发,本文不断更新中... ...

  6. [Firebase] Deploy you website to Firebase

    If you are looking for a host website, you can try Firebase, heroku or AWS... Today, I tried to depl ...

  7. 汉诺塔III 递推题

    题目描述: 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动 ...

  8. 第四篇:R语言数据可视化之折线图、堆积图、堆积面积图

    折线图简介 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先 ...

  9. Linux 套接字编程中要注意的细节

    隐患 1.忽略返回状态 第一个隐患很明显,但它是开发新手最容易犯的一个错误.如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失.反过来,这可能传播错误,使定位问题的源头变得困难. 捕获 ...

  10. iOS平台基于ffmpeg的视频直播技术揭秘

    现在非常流行直播,相信很多人都跟我一样十分好奇这个技术是如何实现的,正好最近在做一个ffmpeg的项目,发现这个工具很容易就可以做直播,下面来给大家分享下技术要点: 首先你得编译出ffmpeg运行所需 ...