请问TAILQ中用二级指针来实现双向链表的好处在哪?

Lawrence
  • 19

最近学习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.1k
1 个回答
187J3X1
  • 1.8k
✓ 已被采纳

哈,这个我以前正好整理过。。tailq之一二事

好处就是,删除第一个节点或者在第一个节点不用特殊处理。

当然这不是和Linux中的list相比(因为它也没有特殊处理)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏