实现LRU缓存策略
LRU缓存策略
英文全称Least Recently Used,是页面置换算法的一种,即淘汰掉最长时间不使用的页面。在缓存中,是一种缓存淘汰策略,优先删除很久没有用过的数据。
实现思路分析
设计put
和get
方法,实现O(1)时间的查找插入删除,应该用散列表;但散列表是无序的,要实现有序性,应该用链表结构。因此,一个哈希链表的结构符合我们的要求。
实现代码
题目来源:LeetCode 146
解法来源:LeetCode用户 labuladong
- 所需的数据结构(双向链表)
//双向链表
struct Node{
size_t key, val;
Node* next;
Node* pre;
Node(size_t k, size_t v): key(k), val(v), next(nullptr), pre(nullptr) {
}
};
- 双向链表需要的一些接口函数
class DoubleList{
private:
Node head, tail; //头尾哨兵节点
size_t size; //链表长度
public:
//新建双向链表
DoubleList(){
head = new Node(0,0);
tail = new Node(0,0);
head->next = tail;
tail->pre = head;
size = 0;
}
//在头部添加节点
void addToHead(Node n){
Node* temp = head->next;
n-