与ChatGPT对话:请用C语言写一个基于内存的缓存系统

下面是一个简单的基于内存的缓存系统,使用哈希表来实现快速查找和更新缓存。此缓存系统支持添加缓存、删除缓存、查找缓存以及打印缓存的功能。

#include 
#include 
#include 

#define MAX_CACHE_SIZE 100
#define HASH_SIZE 10

typedef struct node {
    char key[50];
    char value[50];
    struct node* next;
} node_t;

node_t* hash_table[HASH_SIZE];

// 计算哈希值
unsigned int hash_func(char* key) {
    unsigned int hashval = 0;
    for (int i = 0; key[i] != ''; i++) {
        hashval = key[i] + (hashval << 5) - hashval;
    }
    return hashval % HASH_SIZE;
}

// 查找缓存
node_t* lookup(char* key) {
    unsigned int hashval = hash_func(key);
    node_t* node = hash_table[hashval];

    while (node != NULL) {
        if (strcmp(key, node->key) == 0) {
            return node;
        }
        node = node->next;
    }

    return NULL;
}

// 添加缓存
void add_cache(char* key, char* value) {
    node_t* node = (node_t*)malloc(sizeof(node_t));
    strcpy(node->key, key);
    strcpy(node->value, value);

    unsigned int hashval = hash_func(key);
    node->next = hash_table[hashval];
    hash_table[hashval] = node;
}

// 删除缓存
void delete_cache(char* key) {
    unsigned int hashval = hash_func(key);
    node_t* node = hash_table[hashval];
    node_t* prev = NULL;

    while (node != NULL) {
        if (strcmp(key, node->key) == 0) {
            if (prev == NULL) {
                hash_table[hashval] = node->next;
            } else {
                prev->next = node->next;
            }
            free(node);
            return;
        }
        prev = node;
        node = node->next;
    }
}

// 打印所有缓存
void print_cache() {
    for (int i = 0; i < HASH_SIZE; i++) {
        node_t* node = hash_table[i];
        while (node != NULL) {
            printf("%s: %s
", node->key, node->value);
            node = node->next;
        }
    }
}

int main() {
    char key[50];
    char value[50];
    int choice;

    while (1) {
        printf("请选择功能:
");
        printf("1. 添加缓存
");
        printf("2. 删除缓存
");
        printf("3. 查找缓存
");
        printf("4. 打印缓存
");
        printf("5. 退出程序
");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                if (MAX_CACHE_SIZE == 0) {
                    printf("缓存已满,无法添加!
");
                    break;
                }
                printf("请输入要添加的缓存的键和值:
");
                scanf("%s%s", key, value);
                add_cache(key, value);
                MAX_CACHE_SIZE--;
                break;
            case 2:
               
            printf("请输入要删除的缓存的键:
");
            scanf("%s", key);
            delete_cache(key);
            MAX_CACHE_SIZE++;
            break;
        case 3:
            printf("请输入要查找的缓存的键:
");
            scanf("%s", key);
            node_t* node = lookup(key);
            if (node != NULL) {
                printf("%s: %s
", node->key, node->value);
            } else {
                printf("缓存不存在!
");
            }
            break;
        case 4:
            print_cache();
            break;
        case 5:
            return 0;
        default:
            printf("无效的选择!
");
    }
}

在程序中,我们还设置了一个 MAX_CACHE_SIZE 的常量来限制缓存的数量。每当添加缓存时,我们将 MAX_CACHE_SIZE 减 1;每当删除缓存时,我们将 MAX_CACHE_SIZE 加 1。如果 MAX_CACHE_SIZE 的值为 0,则无法添加缓存。

该程序的主函数中使用一个无限循环来持续接收用户的输入,直到用户选择退出程序。在每次循环中,程序会提示用户选择要执行的操作,并根据用户的选择执行相应的操作。如果用户选择无效的操作,则程序会输出提示信息。

该缓存系统虽然简单,但足以演示基于内存的缓存系统的实现原理。在实际应用中,需要考虑更多的因素,例如缓存的过期时间、缓存的淘汰策略等。


展开阅读全文

页面更新:2024-03-13

标签:缓存   内存   系统   常量   函数   语言   操作   简单   功能   程序   用户

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top