1.链表的定义
链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。画图演示:
2.特点
(1)不需要连续的内存空间。
(2)有指针引用
(3)三种最常见的链表结构:
单链表、
双向链表
循环链表
和单向表类似,不过头尾相连
(4)头结点:第一个节点
(5)尾结点: 最后一个节点
LRU算法使用链表实现思路
1,去链表中查找如果存在,删除改元素,然后将该元素插入到头部,保证头部都是最新的
2,如果链表长度超过限制,则删除尾部数据。
重要区别:
1.数组简单易用,在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率更高。
2.链表在内存中并不是连续存储,所以对CPU缓存不友好,没办法有效预读。
3.数组的缺点是大小固定,一经声明就要占用整块连续内存空间。如果声明的数组过大,系统可能没有足够的连续内存空间分配给它,
导致“内存不足(out ofmemory)”。如果声明的数组过小,则可能出现不够用的情况。
4.动态扩容:数组需再申请一个更大的内存空间,把原数组拷贝进去,非常费时。链表本身没有大小的限制,天然地支持动态扩容。