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(极客时间付费专栏)

原文地址:https://www.cnblogs.com/yangjiming/p/10218863.html