下面是一个简单的基于内存的缓存系统,使用哈希表来实现快速查找和更新缓存。此缓存系统支持添加缓存、删除缓存、查找缓存以及打印缓存的功能。
#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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号