redis--链表

链表

redis数据结构–链表:作为一种常用的数据结构,在这里就不详细介绍了。链表提供了高效的几点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。

1、链表和节点的实现

每个链表节点使用一个listNode结构来表示:

typedef struct listNode {

    //前置节点

    struct listNode *prev;

    //后置节点

    struct listNode *next;

    //节点值

    void *value;

}listNode;

多个listNode组成的双端链表如下图所示:

链表结构示意图

这里多了一个链表的操作节点:

typedef struct list{

    //表头节点

    listNode *head;

    //表尾节点

    listNode *tail;

    //链表中的节点数

    unsigned long len;

    //复制函数,指定

    void *(*dup) (void *ptr)

    //释放函数

    void (*free) (void *ptr)

    //对比函数

    void (*match) (void *ptr,void *key)

}list;
  • dup函数用于复制链表节点保存的值。

  • free函数用于释放链表节点保存的值。

  • match函数用于比较节点锁存的值和另一个输入值是否相等。

完整结构示意图

2、链表和节点API

下表列出了链表和节点的API:

函数作用时间复杂度
listSetDupMethod将给定的函数设置为链表的节点值复制函数O(1)
listGetDupMethod返回俩表当前正在使用的节点复制函数通过dup属性获得,O(1)
listSetFreeMethod将给定的函数设置为链表的节点值释放函数O(1)
listGetFree返回当前链表正在使用的节点值释放函数O(1)
listSetMatchMethod将给定函数设置为为链表节点值对比函数O(1)
listGetMatchMethod返回链表当前正在使用的几点值对比函数O(1)
listLength返回链表的长度(包含多少个节点)通过属性len获得,O(1)
listFirst返回链表的表头节点O(1)
listLast返回链表的表尾节点O(1)
listPrevNode返回给定节点的前置节点O(1)
listNextNode返回给定节点的后置节点O(1)
listNodeVaue返回给定节点目前正在保存的值O(1)
listCreate创建爱你一个不包含任何节点的新链表O(1)
listAddNodeHead将一个包含给定值的新节点添加到给定链表的表头O(1)
listAddNodeTail将一个包含给定值的新节点添加到给定链表的表头尾O(1)
listInsertNode将一个包含给定值的新节点添加带给定节点之前或者之后O(1)
listSearchKey查找并返回链表中包含给定值得节点O(N),N为链表长度
listIndex返回列表在给定索引上的节点O(N),N为链表长度
listDelNode从链表中删除给定节点O(N),N为链表长度
listRotate将链表的表尾节点弹出,然后将被弹出的节点插入到表头的位置,成为新的表头节点O(1)
listDup复制一个给定链表的副本O(N),N为链表长度
listRelease释放给定链表,以及链表中的所有节点O(N),N为链表长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值