当前位置: 首页 > news >正文

数据结构与算法—链表list

目录

链表

链表类型

链表插入

链表删除

写程序注意点

与数组区别

链表应用

LRU 实现思想


链表

        链表,一种提高数据读取性能的技术,在硬件设计、软件开发中有广泛应用。常见CPU缓存,数据库缓存,浏览器缓存等。缓存满时,采用相应的策略清除一部分缓存。如FIFO,LFU(Least Frequently Used),LRU(Least Recently Used)

链表类型

        单链表,双链表,循环链表

链表插入

 

x->next = p->next;
p->next = x;

链表删除

删除p节点的后继节点

p->next = p->next->next;

删除链表的最后一个节点

if(head->next ==  NULL)head = NULL;

写程序注意点

链表尾空,代码能否工作

链表只有一个节点,

链表包含两个节点?

链表头尾节点处理

与数组区别

数组需要连续的存储空间;链表不需要连续的存储

数组与链表的对比,并不能局限于时间复杂度。

数组简单易用,在实现上使用连续的内存空间,借助于CPU的缓存机制,预读数组中的数据,访问效率更高。而链表在内存中并不是连续存储,没法预读。

数组缺点,系统没有足够的连续空间,导致内存不足。数组申请时大小固定,如果不够用,不支持动态扩容。

如果代码对内存使用苛刻,使用数组。因为链表节点占用空间。而且链表的删除,插入导致内存申请和释放,容易造成内存碎片。

链表应用

LRU 实现思想

维护一个链表,越靠近尾部节点,是越早之前访问。有新数据访问时,从链表头开始顺序遍历链表。

  1. 如果数据已经被缓存到链表中,遍历链表,将其从原来位置删除,插入到链表头。
  2. 如果不在缓存中,缓存未满,直接将此节点插入到链表的头部
  3. 如果缓存满,,将链表尾节点删除,将新的节点插入链表的头部

list.h

typedef struct listNode
{struct listNode *next;void *value;
}listNode;typedef struct linkedList
{listNode *head;size_t len;
}linkedList;

http://www.lryc.cn/news/18907.html

相关文章:

  • 自定义View练习题目整理
  • LAMP平台部署及应用
  • ubuntu20.04安装python3虚拟环境
  • VUE3源码分析————rollup打包
  • 【JavaScript】前端实现电子签名:
  • Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Feb 2023)
  • 【java】Spring Cloud --Spring Cloud Alibaba 教程
  • 通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作增加编程要求
  • 银行家算法
  • 181、【动态规划】leetcode ——72. 编辑距离(C++版本)
  • mysql 中关于慢查询日志
  • 程序员必备的软技能-金字塔原理拆解(上)
  • 关于我利用python开发的PC端标注软件及目标检测软件
  • Git导出增量包的操作步骤
  • JavaWeb--JavaScript
  • mars3d加载建筑物白膜及简单建筑物样式
  • 数据结构之顺序表
  • 【数据挖掘实战】——家用电器用户行为分析及事件识别
  • 肠道核心菌属——双歧杆菌属,了解并拥有它
  • Python 之 Pandas 生成时间戳范围、Pandas 的时期函数 Period() 和时间序列 - 重采样 resample
  • 利用Python和Sprak求曲线与X轴上方的面积
  • 利用机器学习(mediapipe),进行人手的21个3D手关节坐标检测
  • 【添砖java】谁说编程第一步是hello world
  • el-table大数据量渲染卡顿问题
  • MyBatis-Plus 实现分页的几种写法
  • 记一次Binder内存不足导致的应用被杀
  • Zabbix4.0架构理解-zabbix的工作方式
  • MySQL中的一些非常实用的函数、语法
  • RT-Thread移植到STM32F407
  • VR全景到底有多全能?为何屡受关注?