【数据结构与算法】链表

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.新值(内存够,头添加;内存不够,尾删,头添加)

posted @   星星客  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示