数据结构——链表的封装

一、封装链表:

链表的缺点:尾添加的效率低、非法下标的判断效率也非常低

1、单链表

    结点:
        数据域
        指针域 
        
    单链表数据项:
        头结点
        尾结点
        结点数量 

2、静态链表

    结点:
        数据域 
        游标
        
    静态链表的结点存储在连续的内存中,通过游标来访问下一个结点
    这种链表在插入删除时,只需要修改删除游标的值,而不用申请、释放结点内存就可以达到类似链式结构的效果
    牺牲了连续存储随机访问的功能,也没达到链表动态申请内存的效果,只是给没有指针的编程语言实现链表的一种方式,适用范围不大

3、循环链表

    链表的最后一个结点next不再指向NULL,而是指向头结点(不带头结点则指向第一个结点),这种链表称为单向循环列表,简称循环链表
    它的好处是可以通过任意结点来遍历整个链表

4、双向链表

    结点:
        前驱指针 prev
        数据域
        后继指针 next
        
    数据项:
        头结点
        结点数量
        
    特点:
        1、在任意结点都可以遍历整个链表
        2、相比单链表,删除、插入更方便
        3、已知结点位置,可以选择从前往后或者从后往前遍历,提高链表的访问效率

5、Linux内核通用链表

    既然链表的结点不能包含万物,那么就让万物来包含结点
    运算:常规功能+回调函数
    
    结点:
        void* ptr;
        指针域
//计算结构成员member所在结构中的距离第一个成员地址编号的差值
 #define offset(type,member) ((int)&(((type*)0)->member))
 //计算返回结构成员指针所在结构变量的首地址
        #define node_to_obj(node,type,member) ((type*)((void*)node-offset(type,member)))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值