C语言 | Leetcode C语言题解之第146题LRU缓存

题目:

题解:

cpp 复制代码
typedef struct {
    int key;
    int val;
    UT_hash_handle hh;
} LRUCache;

LRUCache* cache = NULL;
int g_capacity = 0;
LRUCache** lRUCacheCreate(int capacity) {
    g_capacity = capacity;
    return &cache;
}

int lRUCacheGet(LRUCache** obj, int key) {
    LRUCache* s;

    HASH_FIND_INT(*obj, &key, s);
    if (s) {
        HASH_DEL(*obj, s);
        HASH_ADD_INT(*obj, key, s);
        return s->val;
    }

    return -1;
}

void lRUCachePut(LRUCache** obj, int key, int value) {
    LRUCache* s = NULL;

    HASH_FIND_INT(*obj, &key, s);
    if (s) {
        HASH_DEL(*obj, s);
    }
    s = (LRUCache*) malloc(sizeof (*s));
    s->key = key;
    HASH_ADD_INT(*obj, key, s);
    s->val = value;

    s = *obj;
    int capacity = HASH_COUNT(*obj);
    if (capacity > g_capacity) {
        HASH_DEL(*obj, s);
        free(s);
    }
}

void lRUCacheFree(LRUCache** obj) {
    LRUCache *current_user, *tmp;

    HASH_ITER(hh, *obj, current_user, tmp) {
        HASH_DEL(*obj, current_user); 
        free(current_user); 
    }
}
相关推荐
一只自律的鸡3 分钟前
C项目 天天酷跑(下篇)
c语言·开发语言
长安——归故李25 分钟前
【C语言】成绩等级制
c语言·开发语言
chenziang130 分钟前
leetcode hot100 对称二叉树
算法·leetcode·职场和发展
青い月の魔女2 小时前
数据结构初阶---二叉树
c语言·数据结构·笔记·学习·算法
最后一个bug3 小时前
STM32MP1linux根文件系统目录作用
linux·c语言·arm开发·单片机·嵌入式硬件
林的快手3 小时前
209.长度最小的子数组
java·数据结构·数据库·python·算法·leetcode
FeboReigns3 小时前
C++简明教程(4)(Hello World)
c语言·c++
FeboReigns3 小时前
C++简明教程(10)(初识类)
c语言·开发语言·c++
小猿_004 小时前
C语言实现顺序表详解
c语言·开发语言
Dola_Pan4 小时前
C语言:随机读写文件、实现文件复制功能
c语言·开发语言