数据结构day04

一、封装链表

    尾添加的效率非常低,非法下标的判断效率也非常低

    1、单链表

        结点:

            数据域

            指针域

        单链表数据项:

            头结点

            尾结点

            结点的数量

    2、静态链表

        结点:

            数据域

            游标

        静态链表的结点存储在连续的内存中,通过游标来访问下一个结点

        这种链表在插入删除时需要修改游标的值,而不用申请、释放结点内存就可以达到类似链式结构的效果

        牺牲了随机访问的功能、也没达到链表动态申请内存的效果,只是给没有指针的编程语言实现链表的一种方法,适用范围不大

    3、循环链表

        链表的最后一个结点的next不再指向NULL,而是指向头结点,这种链表称为单项循环链表,简称循环链表

        它的好处是可以通过任意结点来遍历整个链表

   

    4、双向链表

        结点:

            前驱指针  prev

            数据域

            后继指针  next

        数据项:

            头结点

            结点数量

        特点:

            1、在任意节点都可以遍历整个链表

            2、相比单链表,删除、插入更直接

            3、已知结点的位置,可以选择从前往后或者从后往前遍历,提高链表的访问效率

       

    5、Linux内核通用链表

        链表的结点不能包含万物,那么就让万物来包含结点

    //  计算结构成员member所在结构中的距离第一个成员地址编号的差值

    #define offset(type,member) ((int)&(((type*)0)->member))

    //  计算返回结构成员指针所在结构变量的首地址

    #define node_to_obj(node,type,member) ((type*)((void*)node-offset(type,member)))


 

二、关于链表的常考面试题

    1、单链表逆序,在原链表数据的基础上进行调整

    2、找出单链表的倒数第n个结点

    3、判断链表中是否有环

    4、找出环形链表的入口

    5、合并两个有序链表,合并后依然有序

    6、判断两个链表是否是Y型链表,找出相交点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值