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替换算法 ...
随机推荐
- JS调用中文乱码怎么办
网络上有很多的实用的小插件,这些小插件可以直接拿过来实用即可,但是在使用的时候会出现很多的问题,就比如与说今天要讲的乱码中文乱码的问题,这个主要是因为我们调用的js和我们写的程序使用的编码不同,那么如 ...
- 原生js拖拽
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程.也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB.往下看我们告诉你为什么这样做.为什么要用Mari ...
- 第一部分:连接MYSQL数据库代码
<?php $connec=mysql_connect("localhost","root","root") or die(" ...
- 安装freetds小记
FreeTDS的软件获取:在官网上进行下载:http://www.freetds.org/ 执行以下命令: ./configure --with-tdsver=7.1 --enable-msdblib ...
- Java高效编程之四【C语言结构的替代】
本章节可以跳过,但是[二十一]是非常有价值的 十九.用类代替结构 坚持以包含私有域和公有访问方法(accessor method)的类.Java平台中有几个类违反了“公有类不应该直接暴露数据域”的告诫 ...
- 非常好的Oracle教程【转】
http://www.blogjava.net/kiant/articles/234781.html Oracle 笔记(四).SQL 几个要点 附录: 1.SQL 简介 2.SQL 操作符 3.Or ...
- 日常总结——JSP篇(补)
序—— 初次接触JSP,写一个登录注册界面 正文—— JSP介绍:JSP通过在标准的HTML页面中插入java代码,其静态的部分无须java程序控制.每个JSP页面就是一个servlet实例, WEB ...
- MFC 工具栏隐藏与显示
最近在学MFC,看的是孙鑫的VC++视频,感觉还不错.在看到第九节课的时候,讲到工具栏的时候,做了个小功能:工具栏的隐藏和显示,但是有个bug就是一个悬浮的工具栏隐藏后再显示,就会变成停靠状态.这里我 ...
- 写Python脚本语言时,“SyntaxError: Non-ASCII character '\xe6' in file”错误的处理
如图是一段简单的文件操作代码,以为打开文件"test1221_1.py",若不存在此文件,则创建此文件.接下来并输出相关信息. 当少写了黄色方框圈起来的一行看似不经意的带有编码格式 ...