redis4.0.11双向链表

typedef struct listNode {
    struct listNode *prev;
    struct listNode *next;
    void *value;
} listNode;

typedef struct listIter {
    listNode *next;
    int direction;
} listIter;

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;

双向链表的结构体没有特殊的内容。节点有前驱prev,后继next,和存内容的value。迭代器有后继next和迭代方向。链表存了头head,尾tail,长度len,以及自定义的dup、free、match函数。

/* Rotate the list removing the tail node and inserting it to the head. */
void listRotate(list *list) {
    listNode *tail = list->tail;

    if (listLength(list) <= 1) return;

    /* Detach current tail */
    list->tail = tail->prev;
    list->tail->next = NULL;
    /* Move it as head */
    list->head->prev = tail;
    tail->prev = NULL;
    tail->next = list->head;
    list->head = tail;
}

这个函数的作用就是把链表的尾巴转到头部,实际用处还没看到,先留下一个疑问吧。 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中使用 Redis 实现双向链表需要使用 Redis 的 List 数据结构。List 数据结构在 Redis 中是一个双向链表,可以通过 Redis 的命令实现双向链表的操作。 下面是一个简单的 Java 实现双向链表的示例代码: ```java import redis.clients.jedis.Jedis; public class RedisLinkedList { private Jedis jedis; private String key; public RedisLinkedList(String key) { jedis = new Jedis("localhost"); this.key = key; } public void addFirst(String value) { jedis.lpush(key, value); } public void addLast(String value) { jedis.rpush(key, value); } public String getFirst() { return jedis.lindex(key, 0); } public String getLast() { long lastIndex = jedis.llen(key) - 1; return jedis.lindex(key, lastIndex); } public String removeFirst() { return jedis.lpop(key); } public String removeLast() { return jedis.rpop(key); } public void printList() { System.out.print("List: "); for (String value : jedis.lrange(key, 0, jedis.llen(key) - 1)) { System.out.print(value + " "); } System.out.println(); } public static void main(String[] args) { RedisLinkedList list = new RedisLinkedList("mylist"); list.addFirst("1"); list.addLast("2"); list.addLast("3"); list.printList(); String first = list.removeFirst(); System.out.println("Removed first element: " + first); list.printList(); String last = list.removeLast(); System.out.println("Removed last element: " + last); list.printList(); System.out.println("First element: " + list.getFirst()); System.out.println("Last element: " + list.getLast()); } } ``` 在这个示例中,我们使用 Jedis 作为 Redis 的 Java 客户端,定义了一个 RedisLinkedList 类来封装 Redis 的 List 数据结构。在 RedisLinkedList 类中,我们通过 Jedis 的 lpush、rpush、lindex、llen、lpop、rpop 和 lrange 方法来实现双向链表的操作。在 main 方法中,我们对 RedisLinkedList 类进行了简单的测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值