在学习很多服务器软件中,当内存不够,而需要淘汰内存的时候,一般会使用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. Java调用R(三)_系统命令调用

    java通过配置的系统命令Rscript直接调用R脚本. 优点:R脚本和Java代码完全分离 缺点:R中变量不能控制 1. Java本地能够成功调用. public void CallR() { Ru ...

  2. 用C#来开发CAD插件,含源代码

    转自原文 用C#来开发CAD插件,含源代码 CAD插件看起来很神秘,其实一个合格码农经过几天就能快速掌握.没什么秘密,开发CAD插件和winform一样简单学几个类库用法就是(只是太多人不喜欢知识分享 ...

  3. html中em和px

    px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. em是相对长度单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸 ...

  4. Lucene 4.x实践1

    在Lucene 3.x时代,<Lucene In Action>是一本相当不错的参考书,书中详细介绍了Lucene各种高级使用技术,对于开发者来说非常实用.但是近期Lucene升级到了4. ...

  5. Tomcatserverhttps协议配置简单介绍

    一. 数字签名证书制作 1. 用jdk自带的keytool工具生成证书. 2. 导出证书: 3. 交给CA签名认证: 注意:制作具体步骤演示样例參见附录. 二.改动server.xml文件 改动con ...

  6. android开发launcher

    1. launcher是桌面应用程序 一. android.intent.category.LAUNCHER与android.intent.category.HOME的差别?      android ...

  7. staticMetaObject

    staticMetaObject : QObject 及其 子类 的静态属性成员. 定义如下: const QMetaObject staticMetaObject; QMetaObject 记录了 ...

  8. MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk

    redis 有如标题所示提示, 可从两方面查找原因: 一, 可以看一下,运行redis实例的用户, 是否对redis, 数据保存的目录有写权限(既然是排查错误,不防把redis所在目录权限最大化试一下 ...

  9. Notice : Soft open files now is 1024, We recommend greater than 10000

    在研究 workerman 时, 报了这个错误, 感觉只是个notice级别的, 就一直给忽略掉了, 今天有时间, 就查了一下. 其实本质就是 ulimit 这个命令 打开一个命令行, 输入 ulim ...

  10. MyBatis 学习总结(二)

    1.MyBatis基础环境的搭建 1.1 核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8& ...