Cache——缓存数据结构实现

本文介绍了缓存的基本概念和重要性,特别是在面试和算法题中的应用。重点讲解了LRU(Least Recently Used)缓存的设计思路,包括使用链表和哈希表来存储数据。文中还详细描述了缓存的插入、查询操作,并提供了实现细节。最后,总结了LRU缓存的意义,并分享了完整的代码实现。
摘要由CSDN通过智能技术生成

Cache——缓存

缓存是临时存放数据的区域,缓存的运行速度比内存快得多,设计好一个缓存结构能够帮助我们更快地运行程序。
进来在阿里面试的时候也遇到设计一个缓存的问题,同时leetcode和Hihocoder上都出现了设计缓存的问题,因此特此整理出来以便后续回忆。


设计思路

本文将最为常见的缓存的设计思路,学习操作系统的时候,我们直到一个内存置换的算法:LRU(Least Recently Used)。常用缓存的设计思路是一致的,每次查询(或者输入)一个新的数据的时候,若该数据不在缓存中,那么需要将缓存中“最不常用”的数据删掉,并将该数据放置在缓存的起始位置(意思就是最快能取到的地方),因为我们有假设:当前我们用的数据很有可能在未来频繁的用到。

结构实现

上述讲了大致的cache设计思路,根据思路我们可以直接想到缓存中必须有一个标志变量来表示的缓存的容量:m_capacity。

而最终我们选择使用链表来存储所有的缓存数据(以下假设数据是string),并用一个map来保存每个数据以及其在链表中的位置。利用map我们可以每次快速判断新来的数据是否在缓存中。

具体如下:

list<string> m_list;//链表来保存实际数据

typedef unordered_map<string, list<string>::iterator> Map_t;
Map_t map_t;//保存每个数据在链表中的位置

int m_capacity;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值