与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,则无法添加缓存。
该程序的主函数中使用一个无限循环来持续接收用户的输入,直到用户选择退出程序。在每次循环中,程序会提示用户选择要执行的操作,并根据用户的选择执行相应的操作。如果用户选择无效的操作,则程序会输出提示信息。
该缓存系统虽然简单,但足以演示基于内存的缓存系统的实现原理。在实际应用中,需要考虑更多的因素,例如缓存的过期时间、缓存的淘汰策略等。
青岛看海,景点最美最多的线路在这里头条创作挑战赛五四广场和栈桥哪个是青岛的地标,它们之间有多远的距离,都有哪些景点,带着这些疑问,昨天沿着海岸线我走出了平生最多的步数25425步,用时七个半小时!每次回来只要有时间
30张图,看北京警察的中秋节又逢一年月圆满最是人间好时节在相聚的夜晚有一群可爱的人坚守如故守望灯火,守护团圆在商圈在街巷在检查站皎洁的月光伴着温暖的红蓝光芒他们深入辖区的每一个角落开展安全检查隐患排查守护团圆
很多长沙人都不知道的山峰,曾与岳麓山齐名,位于市区内岳麓山与橘子洲几乎成为长沙的地标,特别是岳麓山,拥有着浓厚的历史人文底蕴,携岳麓书院之势,真正向游客诠释了山不在高有仙则灵的真理,其实在长沙,还有一座山峰,在古代和抗日战争时期,都
徽杭古道徒步体验,超全超详细攻略徒步线路安徽省绩溪县江南村浙江省杭州市浙川村日期2022年9月8日天气阴里程全程17公里,最高海拔1049米,累计爬坡773米,历时7小时46分。途经站点和景点江南第壹关西寺飞瀑施
这是哪里?太美了湖北日报客户端讯(利川频道通讯员李传书杨翠)当你来到这里的时候,你会发现自己脚踏五彩云雾,眼观入诗入画的绿水青山。云雾缭绕着山川河流梯田民居,缥缥缈缈,你会觉得好像身在仙境。是的,
7岁小女孩暗藏神力?32吨巨石轻松推动前言2014年的一天,在安徽郎溪姚村乡境内的一个石佛山景区,传出了一个令人震惊的消息一个刚上小学的7岁小女孩,据说凭借着一己之力,竟然将32吨重的巨石推动了!在场的人见到这一幕,无
徽县不在安徽,在甘肃陇南,有陇上小江南之称,这里是富饶之地徽县,乍一听这个地名以为是在安徽省,其实徽县与安徽无关。徽县在甘肃省陇南市东北部,因这里的徽山脚下有徽山驿而得名。甘肃省徽县县城徽县地图甘肃省徽县地处秦岭山脉的西延地带,与陕西省挨
那个立帖为证要去打扫东安湖公园的朋友,官方回复你了昨晚今晨网络上最热的话题之一莫过于有网友称,如果龙泉驿今晚(13日)12点能解封,我把东安湖公园扫一遍,成都龙泉驿公安幽默回复这可是你说的。今天(14日)下午1时许,东安湖公园对此
远离热浪!躲在山间的这几家长沙民宿,太适合避暑了自从到了夏天,才发现哪凉快哪待着去真不是一句骂人的话,而是最真挚的关怀。这个暑假,长沙炙烤般的温度着实让人难以承受,想要避暑?晨视频为你整理了这一期民宿避暑特辑,一起远离热浪,去民
超好吃的长汀泡猪腰说到猪腰,就是猪肾。按中医说法呢,吃啥补啥。那泡猪腰,看来是补肾的上品啦。为何叫泡猪腰?因为关键点在一个泡字上。第一泡,将切好的猪腰放入水中洗净。然后加酒与盐泡个十多分钟。此为第一
北海这个漂亮的湖景公园,如果在市中心,人气应该会爆表北海市休闲公园其实不少,中山公园长青公园海滨公园西藏路带状公园市花公园西南大道带状公园等。但是众多公园中却缺乏一个比较大的湖景公园,长青公园那个湖还是偏小了。而一个公园,缺乏点水中