tail queue的理解

本文详细介绍了Tail Queue的数据结构及其宏定义,包括链表头的定义、链表元素的定义,以及各种插入、删除和遍历元素的函数宏。通过示例展示了如何在Tail Queue中进行元素操作,如在头部、尾部、某个元素前后插入,以及遍历和删除元素。
摘要由CSDN通过智能技术生成

tailqueue最重要的特点就是在head中增加了一个指向末尾的指针,所以它能够直接在链表的尾部插入数据

一、tail queue的定义宏

1.       链表头的定义,其中包含指向该链表的第一个原素的指针和指向该链表最后一个原素next指针的指针

#define _TAILQ_HEAD(name, type, qual)                   \

struct name {                                \

   qual type *tqh_first;       /*first element */     \

   qual type *qual *tqh_last;  /*addr of last next element */ \

}

#defineTAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,)

 

2.      链表中元素的定义,其中包含指向该元素的下一个元素的指针和指向该元素上一个元素的next指针的指针

#define _TAILQ_ENTRY(type, qual)                    \

struct {                  `               \

   qual type *tqe_next;        /*next element */      \

   qual type *qual *tqe_prev;  /*address of previous next element */\

}

#define TAILQ_ENTRY(type)  _TAILQ_ENTRY(struct type,)

二、tail queue的函数宏

1.      初始化链表头

#define TAILQ_INIT(head) do {                        \

   (head)->tqh_first = NULL;                   \

   (head)->tqh_last = &(head)->tqh_first;              \

} while (/*CONSTCOND*/0)

2.      在链表头插入元素

#define TAILQ_INSERT_HEAD(head, elm, field) do {             \

   if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)    \

       (head)->tqh_first->field.tqe_prev =         \

           &(elm)->field.tqe_next;             \

   else                               \

       (head)->tqh_last = &(elm)->field.tqe_next;      \

   (head)->tqh_first = (elm);                  \

   (elm)->field.tqe_prev = &(head)->tqh_first;         \

} while (/*CONSTCOND*/0)

3.      在链表尾插入元素

#define TAILQ_INSERT_TAIL(head, elm, field)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值