题解 | #设计LRU缓存结构#

设计LRU缓存结构

http://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

信息结构, tuple (key, value) 是取用的数据对。

使用双向链表来作底层数据结构, 链表的容量为 capacity。 设置虚拟的头尾节点。 链表的顺序前后表示 tuple 读写的

使用Map作为各节点的地址寻址字典,Key 为 tuple的key, Value为节点Node。

为什么要用双向链表,便于删除操作。

  1. get的实现:

从map (meta) 中判断是否存在,如果不存在返回-1.

如果存在,则先获得 retNode, 用于return value。

接下来要进行链表的移位。 将retNode 移动到head之后的一号位置。

  1. put(set)的实现: 插入 <key, val2>

从map (meta) 中判断是否存在,如果不存在,则要将该tuple 插入到 head后的一号位置。

但要注意, 这里有capacity 的限制问题, 如果插入前,先作删除链表最后元素的操作; 删除之后再插入。

如果map(meta)中存在该信息, 则要进行移动位置(将key对应的node移动到一号位置)同时进行数据的刷新, Overwrite node的value为新的val2.

全部评论

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务