Redis数据结构 — List

目录

链表结构设计

​编辑链表节点结构设计

链表的优势与缺陷


Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的,所以 Redis 自己设计了一个链表数据结构。

链表结构设计

typedef struct list {//链表头节点listNode *head;//链表尾节点listNode *tail;//节点值复制函数void *(*dup)(void *ptr);//节点值释放函数void (*free)(void *ptr);//节点值比较函数int (*match)(void *ptr, void *key);//链表节点数量unsigned long len;
} list;

链表节点结构设计

typedef struct listNode {//前置节点struct listNode *prev;//后置节点struct listNode *next;//节点的值void *value;
} listNode;

有前置节点和后置节点,本质为双向链表

链表的优势与缺陷

Redis 的链表实现优点如下:

  • listNode 链表节点的结构里带有 prev 和 next 指针,获取某个节点的前置节点或后置节点的时间复杂度只需O(1),而且这两个指针都可以指向 NULL,所以链表是无环链表
  • list 结构因为提供了表头指针 head 和表尾节点 tail,所以获取链表的表头节点和表尾节点的时间复杂度只需O(1)
  • list 结构因为提供了链表节点数量 len,所以获取链表中的节点数量的时间复杂度只需O(1)
  • listNode 链表节使用 void* 指针保存节点值,并且可以通过 list 结构的 dup、free、match 函数指针为节点设置该节点类型特定的函数,因此链表节点可以保存各种不同类型的值

链表的缺陷:

  • 链表每个节点之间的内存都是不连续的,意味着无法很好利用 CPU 缓存,并且容易造成内存碎片化
    能很好利用 CPU 缓存的数据结构就是数组,因为数组的内存是连续的,这样就可以充分利用 CPU 缓存来加速访问。

  • 还有一点,保存一个链表节点的值都需要一个链表节点结构头的分配,内存开销较大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28404.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顺序结构

基本概念顺序表实现Arraylist类使用:小小练习 基本概念 数据结构:描述和组织数据的方式。 数据结构的两种分类方式逻辑结构和物理结构: 逻辑结构:数据元素之间的相互关系;逻辑结构分以下四种。 1:集合&…

Ubuntu查找并安装指定版本包

命令如下: #查看指定包信息 apt-cache show kubeadm | grep 1.23.2 #安装指定版本 apt-get install kubeadm1.23.2-00

浙大数据结构第四周之04-树5 Root of AVL Tree

题目详情: An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Fi…

安卓进程间通信浅谈

Case: /Users/lucas/AndroidStudioProjects/aidldemo-master 一:操作系统 从操作系统原理去看,进程通信主要有三个方法:共享存储、消息传递、管道通信。 二:安卓中的IPC 进程间通信的几种方式:Intent(Bu…

计网笔记--应用层

目录 1--网络程序的组织方式和关系 2--动态主机配置协议(DHCP) 3--域名系统DNS 4--文件传输协议FTP 5--电子邮件 7--万维网WWW 7-1--HTTP的报文格式 7-2--Cookie 7-3--万维网缓存和代理服务器 1--网络程序的组织方式和关系 网络应用程序在各种…

7.12~7.13学习总结

public static void main(String[] args){File dirnew File("D:\\小花花");boolean flag dir.mkdir();System.out.println(flag);File dirsnew File("D:\\小花花\\你爸爸");dirs.mkdirs();String[]adir.list();//列出下一级;字符串数组for(Stri…

【群智能算法改进】一种改进的猎人猎物优化算法 IHPO算法[1]【Matlab代码#49】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始HPO算法2. 改进后的IHPO算法2.1 Cubic映射初始化2.2 透镜成像折射反向学习2.3 强制切换策略 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始HPO算法 此算法…

深入浅出关于网易邮箱开启smtp服务教程

各平台邮箱开启SMTP服务教程 一、QQ邮箱 (服务器地址:smtp.qq.com) 第一步:复制https://mail.qq.com/ 登录QQ邮箱后电击左上角设置,如图: 第二步:点击进入“帐户”页面 ,如图&…

AJAX异步请求JSON数据格式

目录 前言 1.AJAX的实现方式 1.1原生的js实现方式 1.2JQuery实现方式 2.1语法 3.JSON数据和Java对象的相互转换 3.1将JSON转换为Java对象 3.2将Java对象转换为JSON 前言 AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和 XML。 Ajax 是一种在…

016-从零搭建微服务-认证中心(七)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue 源码地址(前端):https://gitee.com/csps…

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于B…

【软件测试面试】腾讯数据平台笔试题-接口-自动化-数据库

数据库题 答案: Python编程题 答案: 接口参数化题 答案: 接口自动化题 答案: 以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区&#…