账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    请问TAILQ中用二级指针来实现双向链表的好处在哪?
    • 见心书画许老师187533751612020-01-01 00:00
    • 10
    68
    0

    最近学习Libevent源码,看到了TAILQ这一数据结构,觉得非常疑惑,为什么要将prev和last定义为二级指针呢?定义为一级指针也完全能实现双向链表的功能吧?而且直接使用一级指针效率也不低。不过这么做肯定有其道理,那么TAILQ中使用二级指针相比于直接用一级指针来说有什么好处呢?谢谢!

    #define TAILQ_HEAD(name, type)                        \
    struct name {                                \
        struct type *tqh_first;    /* first element */            \
        struct type **tqh_last;    /* addr of last next element */        \
    }
    #define TAILQ_ENTRY(type)                        \
    struct {                                \
        struct type *tqe_next;    /* next element */            \
        struct type **tqe_prev;    /* address of previous next element */    \
    }
    2
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 灵魂枷锁 普通会员 1楼

      在TAILQ(Tail-First Queue)中,使用二级指针来实现双向链表的优点有以下几点:

      1. 方便遍历:在双向链表中,我们通常需要在尾部进行遍历。使用二级指针可以更容易地找到链表的尾部元素。

      2. 简化操作:使用二级指针,我们可以更快地执行插入、删除和查找操作。例如,使用二级指针,我们可以更直接地访问链表的中间元素,而不需要遍历整个链表。

      3. 易于查找:在双向链表中,查找操作通常比单向链表要复杂。使用二级指针,我们可以更容易地定位到要查找的元素,而不需要遍历整个链表。

      4. 稳定性:在双向链表中,插入和删除操作的稳定性非常重要。使用二级指针,我们可以更容易地保持链表的稳定性。

      总的来说,使用二级指针可以简化双向链表的操作,提高效率,同时保持链表的稳定性。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部