#include <iostream> #include <assert.h> using namespace std; typedef struct node{ int num; //页面编号 node *next; // node *pre; }node; typedef struct lru_queue{ lru_queue(int n, int max){ this->n=n; this->max=max; l=NULL; } int n; //当前个数 int max; //最大内存容量 node *l; }lru_queue; void print(lru_queue q){ node *p=q.l; while(p!=NULL){ cout<<p->num<<"\t"; p=p->next; } cout<<endl; } void print2(node *p){ while(p!=NULL){ cout<<p->num<<"\t"; p=p->pre; } cout<<endl; } //lru队列l最大容量为max, 调入页面i, 返回调出页面 int insert(lru_queue &q, int i){ node *p=q.l; node *pre=NULL; while(p!=NULL && p->num!=i){ pre=p; p=p->next; } int res=-1; if(p==NULL){ if(q.n == q.max){ pre->pre->next=NULL; res=pre->num; delete pre; node *tmp=new node; tmp->num=i; tmp->pre=NULL; tmp->next=q.l; q.l->pre=tmp; q.l=tmp; }else{ node *tmp=new node; tmp->num=i; tmp->pre=NULL; tmp->next=q.l; if(q.l!=NULL) q.l->pre=tmp; q.l=tmp; q.n++; } }else{ if(p->pre!=NULL){ p->pre->next=p->next; } if(p->next!=NULL){ p->next->pre=p->pre; } delete p; node *tmp=new node; tmp->num=i; tmp->pre=NULL; tmp->next=q.l; q.l->pre=tmp; q.l=tmp; } return res; } int main(void){ lru_queue q(0,3); print(q); assert(-1 == insert(q, 3)); print(q); assert(-1 == insert(q, 5)); print(q); assert(-1 == insert(q, 1)); print(q); assert(-1 == insert(q, 5)); print(q); assert(3 == insert(q, 4)); print(q); assert(-1 == insert(q, 1)); print(q); system("pause"); return 0; }
相关推荐
什么是 LRU LRU Cache是一个Cache的置换算法,含义是“近少使用”,把满足“近少使用”的数据从Cache中剔除出去,并且保证Cache中第一个数据是近刚刚访问的,因为这样的数据更有... 由于我只是简单实现一下这个算
OS操作系统上机题 FIFO,LRU,LFU 的三种页面置换算法的C++实现 {3,2,1,3,2,5,2,3,6,2,1,4,2} 为本实验例子的页面走向 copy直接可运行 提供简单可视化菜单 三种页面置换算法可供选择 注释详细,初学者亦可看懂
用C++实现的虚拟内存技术,控制台程序,简便易懂,旨在模拟操作系统中缺页换页技术,实现fifo和lru两种调页方法
LRU缓存的实现 LRU - 最近最少使用。 完成清单: C C++ 去 JAVA(进行中) C 实现是完整的,并通过 Leetcode 上的 LRU 缓存问题进行了检查。 (C 实现是为了重新熟悉 C 并“回归基础”) C++ 中的实现与 C++ 实现...
这次作业的数据结构比较简单,所以没有单独写类,而是把成员和方法放在DLG类中。 首先关于指令访问次序,我写了一个Rand函数,用于生成上下限之间的伪随机数。由于指令不需要重复执行,所以函数里添加了一些判断指令...
第一次用qt写,写的还不是很好,简单实现了带界面的请求调页的存储管理模式
lru缓存leetcode 使用 Python 的 Leetcode 解决方案 这个项目记录了我用python解决leetcode的想法,持续更新...... # 标题 解决方案 困难 1 简单的 53 简单的 # 标题 解决方案 困难 3 中等的 5 中等的 # 标题 解决...
C++)中的解决方案。 困难 名称 问题 解决方案 笔记 中等的 字符串到整数 (atoi) 中等的 设计循环队列 简单的 四的力量 难的 正则表达式匹配 仅通过 90% 的测试 简单的 1 位的数量 中等的 实现 Trie(前缀树) 中等...
实现的页面替换算法如下: LRU(上次最近使用) 先进先出(先进先出) WSCLOCK(工作设定时钟) 添加新的替换算法非常简单,只需要修改 PageTable 类的 selectEvictPage 函数即可。 switch (this->strategy) { case...
这个 Python 模块只是简单地使用 ctypes 库到 LevelDB 的 C 接口 - 使其在 Python 实现中更具可移植性,并且更易于安装和分发。 leveldb-py: 支持 get/put/delete(带有标准读/写选项) 支持布隆过滤器 支持 ...
表示我使用其他代码(因为这是一个简单的问题或易于实现(懒惰)或太难(我做不到!'))。 基本上我使用,感谢他的帮助! Insigt文件夹是用来记录我的insight的,如果看不懂代码,请找我对应的insight文件阅读。 ...
这样的一大好处是,读者可以边看书,边实现自己的代码,然后提交到网站上验证自己的想法是否正确。AlgoHub的使命是成为最好的算法学习和交流平台。AlgoHub囊括了 POJ, ZOJ, leetcode, HackerRank 等网站的经典题目...