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三个属性定义节点的值进行操作,通过具体的实现,链表可以保存各种类型的值
    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    cocos3.2触摸事件接收顺序
    触摸点是否在按钮矩形内
    scrollview里container拖动显示问题
    cocos2dx 显示对象尺寸
    allocating an object of abstract class
    学习scorllview
    cocos2dx引用计数
    addchild 报错不能添加nil
    有用的宏
    一段SQL
  • 原文地址:https://www.cnblogs.com/walker993/p/14425627.html
Copyright © 2011-2022 走看看