zoukankan      html  css  js  c++  java
  • 第三章 链表

    链表提供了高效的节点重排,顺序性节点访问,并可以通过增删节点灵活调整链表的长度。链表是双向无环的。

    3.1 链表和链表节点的实现

    1. 节点

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

     

    2. 外层封装

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

     

    Redis链表的实现特性:

    • 双端:一个节点寻找前后节点的复杂度O(1)
    • 无环:表头之前,表尾之后均指向NULL,对链表的访问以NULL为止
    • 带表头指针和表尾指针:获取表头和表尾节点的复杂度O(1)
    • 带链表长度计数器:获取节点数量复杂度O(1)
    • 多态:dup、free、match三个属性定义节点的值进行操作,通过具体的实现,链表可以保存各种类型的值
    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    竞态与死锁
    Java-核心技术-面试整理
    接口(工厂模式&代理模式)
    switch case实现两个数的算术运算
    继承和多态举例
    字符串的逆序输出
    引用传递&值传递
    递归的使用
    构造方法的重载
    给定数组,去掉0元素后将剩下的元素赋给新的数组
  • 原文地址:https://www.cnblogs.com/walker993/p/14425627.html
Copyright © 2011-2022 走看看