【数据结构与算法】链表
1.单向链表
链表通过指针将一组零散的内存块串联起来,其中,内存块称为链表的结点。结点包含存储数据以及下一个结点的地址(后继指针next)。头结点用来记录链表的基地址,尾节点是最后一个结点(指针不是指向下一个结点,而是指向一个空地址NULL)。
2.循环链表
循环链表是一种特殊的单链表,其尾节点的指针指向的是头结点。循环链表的优点是从链尾到链头比较方便。
3.双向链表
双向链表支持两个方向,每个结点有后继指针next、前驱指针prev。双向遍历。
4.双向循环链表
双向遍历,并且从尾到头方便。
5.各种链表之间的差异
循环链表比单向链表可以在环形数据上处理效率更高,比如著名的约瑟夫问题。
双向链表比单向链表,在找到要删除的结点时,需要知道前结点,单向链表获取方式o(n),双向链表获取o(1)。
空间:双向链表>单向链表>数组。
删除时间:数组>单向链表>双向链表
6.与数组的区别
数组的空间是定死了的,而链表可以随时进行添加。
数组可以利用CPU缓存进行(内存连续,只有在CPU缓存中没有的情况下,才能去内存中查找),而链表无法有效预读。
数组的查找效率为o(1),链表为o(n);链表的增删效率为o(1),数组为o(n) (块排可以提升效率)
7.LRU缓存讨论算法
使用定长链表来保存缓存,old在尾,new在头。添加值:1.更新值到头。2.新值(内存够,头添加;内存不够,尾删,头添加)

浙公网安备 33010602011771号