【数据结构与算法】链表
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.新值(内存够,头添加;内存不够,尾删,头添加)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报