06链表
1. 链表是什么?
链表通过指针将一组零散的内存块串联在一起;这个内存块称为链表的结点;结点除了存储数据之外,还需要记录下一个结点的地址,这个记录下个结点地址的指针叫做后继指针next;
第一个结点叫做头结点;最后一个结点叫做尾结点;尾结点指针指向的是一个空地址null
2. 链表的分类
单链表:
循环链表:尾结点指针指向链表的头结点。
双向链表:拥有后继指针next指向后面的结点,拥有前驱指针prev指向前面的结点
3. 链表的时间复杂度
插入删除O(1),随机访问O(n),空间换时间
4. 基于链表实现LRU缓存淘汰算法?
常见的缓存淘汰策略
先进先出策略FIFO(first in,first out)
最少实用策略LFU(least frequently used)
最近最少使用策略LRU(least recently used)
思路:维护一个有序单链表,越靠近尾部的结点越是越早之前访问的,即最先应该被淘汰的。
如果数据已被缓存在链表中,遍历得到结点,从原位置删除,插入到链表头部;
如果数据没缓存在链表中:
缓存未满,则将结点直接插入链表头部
缓存已满,将链表尾结点删除,新结点插入链表头部
总结
概念,链表,双向链表,循环链表,缓存淘汰策略
原文出处:https://time.geekbang.org/column/article/41013(极客时间付费专栏)