146.LRU缓存




双向链表+哈希表

cpp 复制代码
class LRUCache {
public:
    //1、定义双向链表结构、容量、哈希表等LRU数据成员
    struct Node{
        int key,value;
        Node *left,*right;
        Node(int _key,int _value):key(_key),value(_value),left(NULL),right(NULL){}
    }*L,*R;

    int n;
    unordered_map<int,Node*> ump;
    
    //2、初始化LRU缓冲,容量为capacity
    LRUCache(int capacity) {
        n=capacity;
        //L、R的分配内存及初始化
        L=new Node(-1,-1);
        R=new Node(-1,-1);
        L->right=R;
        R->left=L; 
    }
    
    //3、定义insert、remove操作
    void remove(Node *p){
        p->left->right=p->right;
        p->right->left=p->left;
    }

    //链表左侧为活跃节点,insert位置
    void insert(Node* p){
        L->right->left=p;
        p->right=L->right;
        p->left=L;
        L->right=p;
    }

    int get(int key) {
        if(ump.count(key)==0) return -1;
        Node *p=ump[key];
        remove(p);
        insert(p);
        return p->value;
    }
    
    void put(int key, int value) {
        if(ump.find(key)!=ump.end()){
            Node* p=ump[key];
            remove(p);
            insert(p);
            p->value=value;
        }else{
            if(ump.size()==n){
                Node *tmp=R->left;
                ump.erase(tmp->key);
                remove(tmp);
                delete tmp;
            }
            Node *p=new Node(key,value);
            insert(p);
            ump[key]=p;
        }
    }
};
相关推荐
189228048611 天前
NV243美光MT29F32T08GWLBHD6-24QJES:B
大数据·服务器·人工智能·科技·缓存
2501_921960851 天前
协同本体论 V4.2+:离散关系拓扑涌现连续时空几何的数值验证
数据结构·人工智能·重构
橙淮1 天前
Java数组与链表:特性对比与应用场景
数据结构·算法
故事和你911 天前
洛谷-【图论2-1】树4
开发语言·数据结构·c++·算法·动态规划·图论
故事和你911 天前
洛谷-【图论2-1】树1
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
橙子圆1231 天前
Redis知识6之事务
数据库·redis·缓存
普马萨特1 天前
地理空间索引技术选型指南:GeoHash, Google S2 与 Uber H3
数据结构
谙弆悕博士1 天前
【附C源码】二叉搜索树的C语言实现
c语言·开发语言·数据结构·算法·二叉树·项目实战·数据结构与算法
宵时待雨1 天前
回溯算法专题2:二叉树中的深搜
开发语言·数据结构·c++·笔记·算法·深度优先
澈2071 天前
平衡二叉树:AVL与红黑树终极对比
数据结构·c++·红黑树