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); 
    }
}
相关推荐
云:鸢1 小时前
C语言链表设计及应用
c语言·开发语言·数据结构·链表
林木辛1 小时前
LeetCode热题 42.接雨水
算法·leetcode
正在起飞的蜗牛2 小时前
【C语言】函数指针的使用分析:回调、代码逻辑优化、代码架构分层
c语言·架构
饭碗的彼岸one3 小时前
C++ 并发编程:异步任务
c语言·开发语言·c++·后端·c·异步
黑菜钟3 小时前
代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和
c++·算法·leetcode
水饺编程4 小时前
Windows 命令行:cd 命令3,当前目录,父目录,根目录
c语言·c++·windows·visual studio
kyle~4 小时前
C/C++---动态内存管理(new delete)
c语言·开发语言·c++
pzx_0014 小时前
【LeetCode】14. 最长公共前缀
算法·leetcode·职场和发展
songx_995 小时前
leetcode10(跳跃游戏 II)
数据结构·算法·leetcode
Yuki’5 小时前
网络编程---UDP
c语言·网络·网络协议·udp