Redis数据结构——链表list

链表是一种常用的数据结构,提供了顺序访问的方式,而且高效地增删操作。

Redis中广泛使用了链表,例如:列表的底层实现之一就是链表。

在Redis中,链表分为两部分:链表信息 + 链表节点。

  • 链表节点用来表示链表中的一个节点,基础的值和指向前和后的指针
  • 链表信息,用来保存整个链表的信息,例如首尾节点、节点数量

先来说链表节点,就是我们最常见的链表节点的结构:

c 复制代码
typeof struct listNode{
	// 前驱节点
	struct listNode *prev;
	// 后继节点
	struct listNode *next;
	
	// 节点的值
	void *value; 
}listNode; 

通过链表节点中的prev和next组成双向链表。

而链表这个结构体中保存了整个链表的信息

c 复制代码
typeof struct list{
	listNode *head; // 表头节点
	
	listNode *tail; // 表尾节点
	
	unsigned long len; // 链表节点数量
	// 接下来就是一些链表操作的API 
	// 节点复制 ...
	// 节点释放 ...
	// 节点比较 ... 
}list; 

Redis中的链表并没有什么特殊之处,总结一下特点:

  • 双端操作,链表信息list中保存了首尾节点
  • 无环,head的prev始终为null,tail的next始终为null
  • O(1)获取链表节点数量
  • 多态:链表节点中通过void*来保存节点值,节点值可以是任意类型。

参考文章

相关推荐
梦想的颜色2 小时前
硬核实践:使用 Docker 部署生产级 Redis(持久化 + 安全配置 + 高可用)
redis·docker·redis持久化·docker compose·redis哨兵·rdb aof
宠友信息3 小时前
多端数据互通场景下Spring Boot仿小红书源码结构设计
数据库·spring boot·redis·缓存·架构
长不胖的路人甲4 小时前
Redis 缓存的数据持久化方案讲解
数据库·redis·缓存
长不胖的路人甲4 小时前
Redis 单线程为什么速度很快
数据库·redis·缓存
彦为君4 小时前
算法思维与经典智力题
java·前端·redis·算法
小陈的代码之路5 小时前
回文链表(LeetCode 234)C语言最佳解题思路
c语言·leetcode·链表
彦为君6 小时前
Redis最新版本特性
java·数据库·redis·算法·bootstrap
长不胖的路人甲6 小时前
Redis 数据删除策略
数据库·redis·spring
金融小师妹7 小时前
人工智能推演框架:非农降温信号如何重构黄金定价模型
数据结构·人工智能·机器学习·transformer
尽兴-7 小时前
Redis 为什么快?
数据库·redis·内存