#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的更多相关文章

  1. 动手实现一个 LRU cache

    前言 LRU 是 Least Recently Used 的简写,字面意思则是最近最少使用. 通常用于缓存的淘汰策略实现,由于缓存的内存非常宝贵,所以需要根据某种规则来剔除数据保证内存不被撑满. 如常 ...

  2. 搞定redis面试--Redis的过期策略?手写一个LRU?

    1 面试题 Redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2 考点分析 1)我往redis里写的数据怎么没了? 我们生产环境的redis怎么经常会丢掉一些数据?写进去了 ...

  3. 如何设计一个LRU Cache

    如何设计一个LRU Cache? Google和百度的面试题都出现了设计一个Cache的题目,什么是Cache,如何设计简单的Cache,通过搜集资料,本文给出个总结. 通常的问题描述可以是这样: Q ...

  4. 写一个LRU算法的记录

    今天简单记录一下,利用Scala解答的一道LRU题目,原题为LeetCode的第146题,是一道设计LRU的题目. 题目详情 运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机 ...

  5. 在我们使用Redis作为一个LRU缓存的时候,怎么做才能更高效

    当用Redis作为一个LRU存储时,有些时候是比较方便的,在你增添新的数据时会自动驱逐旧的数据.这种行为在开发者论坛是非常有名的,因为这是流行的memcached系统的默认行为. LRU实际上只是支持 ...

  6. 【redis前传】自己手写一个LRU策略 | redis淘汰策略

    title: 自己手写一个LRU策略 date: 2021-06-18 12:00:30 tags: - [redis] - [lru] categories: - [redis] permalink ...

  7. 【死磕 Java 基础】 — 自己动手实现一个 LRU

    大家好,我是大明哥,一个专注于[死磕 Java]系列创作的男人 个人网站:https://www.cmsblogs.com/.专注于 Java 优质系列文章分享,提供一站式 Java 学习资料 LRU ...

  8. 字节面试问我如何高效设计一个LRU,当场懵

    首发公众号:bigsai 转载请放置作者和原文(本文)链接 前言 大家好,我是bigsai,好久不见,甚是想念! 最近有个小伙伴跟我诉苦,说他没面到LRU,他说他很久前知道有被问过LRU的但是心想自己 ...

  9. [转]如何用C++实现一个LRU Cache

    [转自http://hawstein.com/posts/lru-cache-impl.html] LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法 ...

随机推荐

  1. 日志时间格式有s,ms,us,如何排序最大10行

    这个比较繁琐,谁有更好方法?告诉我  [root@module tmp]# cat oldboy.txt       12s120001ms12000000us13s[root@module tmp] ...

  2. Python爬虫爬取百度贴吧的图片

    根据输入的贴吧地址,爬取想要该贴吧的图片,保存到本地文件夹,仅供参考: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urllib2i ...

  3. splitFile2SmallFile

    1. split file into several files """ this is aa customizable version of the standard ...

  4. logstash读取redis数据

    类型设置: logstash中的redis插件,指定了三种方式来读取redis队列中的信息. list=>BLPOP                                    (相当 ...

  5. svm机器学习算法中文视频讲解

    这个是李政軒Cheng-Hsuan Li的关于机器学习一些算法的中文视频教程:http://www.powercam.cc/chli. 一.KernelMethod(A Chinese Tutoria ...

  6. 利用lambda和Collection.forEach

    2.外部VS内部迭代 以前Java集合是不能够表达内部迭代的,而只提供了一种外部迭代的方式,也就是for或者while循环. 1 2 3 4 List persons = asList(new Per ...

  7. Microsoft.Crm.Setup.SrsDataConnector.RegisterServerAction 操作失败

     System.Exception: Microsoft.Crm.Setup.SrsDataConnector.RegisterServerAction 操作失败. ---> System.Ty ...

  8. python学习笔记之基础二(第二天)

    1.编码转换介绍        unicode是最底层.最纯的,会根据终端的编码进行转化展示 一般硬盘存储或传输为utf-8(因为省空间.省带宽),读入内存中为unicode,二者如何转换 a = ' ...

  9. Lucene.net

    模糊查询-〉数据库全文检索-〉Lucene 一元分词(lucene内置) Analyzer analyzer = new CJKAnalyzer(); TokenStream tokenStream ...

  10. Thinkphp回顾之(四)查询方法深入学习

    本次讲的查询方法主要有:表达式查询,模糊查询,between语句,in语句,区间查询,统计数据,普通方式查询,但大多数都只是引入数组而已,明白了第一个,其他的也就差不多全明白了,唯一要注意的是在后台中 ...