c++初步实现的一个LRU
#include<iostream>
#include<map>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
struct Node(int element) :data(element),next(NULL) {};
}node;
node* inserts(node* proot, int data)
{
node *ptmp = new node(data);
ptmp->next = proot;
return ptmp;
}
node *deletenode(node* proot, int data)
{
node *res = proot;
if (proot->data == data)
{
node *ptmp = proot;
res = proot->next;
delete ptmp;
}
else if(proot->next!=NULL&&proot->next->data != data)
{
proot = proot->next;
}
else if(proot->next!=NULL&&proot->next->data==data)
{
node *ptmp = proot->next;
proot->next = ptmp->next;
delete ptmp;
}
return res;
}
node* pop(node *proot)
{
node* res = proot;
if (proot == NULL)
return res;
node *ptmp = proot->next;
while (ptmp->next)
{
proot = ptmp;
ptmp = ptmp->next;
}
if (ptmp->next == NULL)
{
proot->next = NULL;
delete ptmp;
}
return res;
}
void printfd(node *proot)
{
while (proot)
{
cout << proot->data << " ";
proot = proot->next;
}
cout << endl;
}
class LRU {
public:
LRU(int length) :root(NULL),len(length) {};
void insert(int data);
void printfs() {
printfd(root);
}
private:
node *root;
map<int, int> vec;
int len;
};
void LRU::insert(int data)
{
if (vec.count(data) > 0)
{
root = deletenode(root, data);
root = inserts(root, data);
}
else
{
if (vec.size() >= len)
{
root = pop(root);
root = inserts(root, data);
vec[data] = data;
}
else
{
root = inserts(root, data);
vec[data] = data;
}
}
}
int main()
{
LRU test(5);
test.insert(1);
test.insert(2);
test.insert(3);
test.printfs();
test.insert(4);
test.insert(5);
test.printfs();
test.insert(6);
test.printfs();
test.insert(7);
test.insert(8);
test.insert(9);
test.printfs();
}
c++初步实现的一个LRU的更多相关文章
- 动手实现一个 LRU cache
前言 LRU 是 Least Recently Used 的简写,字面意思则是最近最少使用. 通常用于缓存的淘汰策略实现,由于缓存的内存非常宝贵,所以需要根据某种规则来剔除数据保证内存不被撑满. 如常 ...
- 搞定redis面试--Redis的过期策略?手写一个LRU?
1 面试题 Redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2 考点分析 1)我往redis里写的数据怎么没了? 我们生产环境的redis怎么经常会丢掉一些数据?写进去了 ...
- 如何设计一个LRU Cache
如何设计一个LRU Cache? Google和百度的面试题都出现了设计一个Cache的题目,什么是Cache,如何设计简单的Cache,通过搜集资料,本文给出个总结. 通常的问题描述可以是这样: Q ...
- 写一个LRU算法的记录
今天简单记录一下,利用Scala解答的一道LRU题目,原题为LeetCode的第146题,是一道设计LRU的题目. 题目详情 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机 ...
- 在我们使用Redis作为一个LRU缓存的时候,怎么做才能更高效
当用Redis作为一个LRU存储时,有些时候是比较方便的,在你增添新的数据时会自动驱逐旧的数据.这种行为在开发者论坛是非常有名的,因为这是流行的memcached系统的默认行为. LRU实际上只是支持 ...
- 【redis前传】自己手写一个LRU策略 | redis淘汰策略
title: 自己手写一个LRU策略 date: 2021-06-18 12:00:30 tags: - [redis] - [lru] categories: - [redis] permalink ...
- 【死磕 Java 基础】 — 自己动手实现一个 LRU
大家好,我是大明哥,一个专注于[死磕 Java]系列创作的男人 个人网站:https://www.cmsblogs.com/.专注于 Java 优质系列文章分享,提供一站式 Java 学习资料 LRU ...
- 字节面试问我如何高效设计一个LRU,当场懵
首发公众号:bigsai 转载请放置作者和原文(本文)链接 前言 大家好,我是bigsai,好久不见,甚是想念! 最近有个小伙伴跟我诉苦,说他没面到LRU,他说他很久前知道有被问过LRU的但是心想自己 ...
- [转]如何用C++实现一个LRU Cache
[转自http://hawstein.com/posts/lru-cache-impl.html] LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法 ...
随机推荐
- vue.js在windows本地下搭建环境和创建项目
Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.另一方面,Vu ...
- Swift 写纯洁的TableviewCell
let initIdentifier = "员工" var cell = tableView.dequeueReusableCell(withIdentifier: initIde ...
- 2.3 C#的常量
常量,顾名思义,就是不会改变的量. 我们平时书写的数字(比如3.14159).字符(比如Q).字符串(比如 谢谢),他们都是一些常量. 在使用这些常量的时候,有些常量很重要而且经常用到,比如圆周率3. ...
- Python __builtins__模块拾穗
1.isinstance函数:除了以一个类型作为参数,还可以以一个类型元组作为参数. isinstance(obj,basestring)===isinstance(obj,(str,unicode) ...
- [MacOS] 终端使用ssh时,中文乱码问题处理
终端显示中文问题处理: vim ~/.inputrc 加入以下代码 set meta-flag on set convert-meta off set input-meta on set output ...
- 在Ubuntu上安装有道词典
4月20日,由有道词典和Deepin团队共同完成的有道词典Linux版终于上线了,首先 推出Deepin和Ubuntu两个系统版本及其他版本的二进制包,估计以后还会有RPM 等版本.有道Linux版界 ...
- Jquery EeasyUI等框架中图标的处理方法
在使用Query EasyUI.Ext等框架开发项目的时候,经常会用到很多小的图标,常见几个图片应用方式总结如下: 一.在jQuery Easyui中添加小图标 1.添加图标的两小步: 先到theme ...
- SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份
SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...
- ubuntu16.04.1下的mysql修改默认编码
在Ubuntu 下配置 Mysql 的字符编码.安装完 Mysql 后,系统默认的字符编码是 latin1 ,输入的是中文,可是输出却是一堆乱码.现在要做的就是把 Mysql的默认字符编码设置为支持中 ...
- linux 时间管理——概念、注意点(一)【转】
转自:http://www.cnblogs.com/openix/p/3324243.html 参考:1.http://bbs.eyeler.com/thread-69-1-1.html ...