首页 > 代码库 > 算法学习 - LRUCache学习(C++)
算法学习 - LRUCache学习(C++)
LRUCache解释
LRUCache就是一个缓存系统,主要是在操作系统中用的比较多,我这里实现的仅仅是一个简单的方法,原理是正确的,但是操作系统的内部的缓存代码我并没有看过。
LRU是Least Recently Used的意思,Cache大家都知道是缓存的意思了。就是在缓存里保存最近最常使用的元素,这样访问这些元素的时候,速度就比较快的能访问到了。
缓存里存放的一般都是键值对,就是(key, value)
的结构,大致最简单的就是有两种操作:
- 一种是
get(key)
,这个方法是从缓存里查找是否有key
的元素,有的话返回其value
值,没有的话返回-1
。 - 一种是
set(key , value)
,这个方法是假如缓存里没有key
的元素,那么放到缓存里,假如缓存已经满了,把最不常用的那个(key, value)给扔掉,再把新元素放进去。假如缓存里已经有key
的元素了,那么更新key
的value
值。
代码实现
大家应该都明白这是一个什么系统了,下面放上我的代码实现:
// // main.cpp // LRUCache // // Created by Alps on 14/12/5. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #include <map> using namespace std; class LRUCache{ public: struct Node{ int key; int value; Node* next; Node* pre; Node(int k, int v):key(k), value(v), next(NULL), pre(NULL){} }; int maxsize; int cursize; typedef Node* Keynode; map<int ,Keynode> cachemap; Keynode head; Keynode tail; LRUCache(int capacity) { head = new Node(-1,-1); tail = new Node(-1,-1); head->next = tail; tail->pre = head; maxsize = capacity; cursize = 0; } void insertHead(Keynode node){ node->next = head->next; node->pre = head; head->next->pre = node; head->next = node; } void deleteNode(Keynode node){ node->pre->next = node->next; node->next->pre = node->pre; } int get(int key) { map<int, Keynode>::iterator iter; iter = cachemap.find(key); if (iter == cachemap.end()) { return -1; }else{ Keynode temp = iter->second; deleteNode(temp); insertHead(temp); return temp->value; } return -1; } void set(int key, int value) { map<int, Keynode>::iterator iter; iter = cachemap.find(key); if (iter == cachemap.end()) { if (cursize >= maxsize) { Keynode freenode = tail->pre; cachemap.erase(freenode->key); deleteNode(freenode); free(freenode); Keynode temp = (Keynode)malloc(sizeof(struct Node)); *temp = Node(key,value); insertHead(temp); cachemap[key] = temp; }else{ Keynode temp = (Keynode)malloc(sizeof(struct Node)); *temp = Node(key,value); insertHead(temp); cursize++; cachemap[key] = temp; } }else{ Keynode temp = iter->second; temp->value = http://www.mamicode.com/value;>算法学习 - LRUCache学习(C++)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。