#define TAILQ_INIT(head) do { \ TAILQ_FIRST((head)) = NULL; \ (head)->tqh_last = &TAILQ_FIRST((head)); \ QMD_TRACE_HEAD(head); \ } while (0) 其中QMD_TRACE_HEAD为了debug而设置的。 (4)插入:TAILQ_INSERT_TAIL(head, elm, field) head是TAILQ_HEAD的头部,elm是对应需要处理的节点...
(head)->tqh_last = &TAILQ_FIRST((head)); \ } while (0) #define TAILQ_INSERT_TAIL(head, elm, field) do { \ TAILQ_NEXT((elm), field) = NULL; \ (elm)->field.tqe_prev = (head)->tqh_last; \ *(head)->tqh_last = (elm); \ (head)->tqh_last = &TAILQ_NEXT((elm), ...
以下是一个简单的TAILQ_QUEUE使用示例: 代码语言:txt 复制 #include <stdio.h> #include <stdlib.h> #include <linux/tailq.h> // 定义一个包含TAILQ_ENTRY的结构体 struct my_element { int value; TAILQ_ENTRY(my_element) entries; }; // 定义一个TAILQ_HEAD TAILQ_HEAD(my_queue, my_element); in...
for(item = TAILQ_FIRST(&my_tailq_head); item != NULL; item = tmp_item) if (item->value == 3) //删除一个元素 TAILQ_REMOVE(&my_tailq_head, item, entries); //释放不需要的内存单元 free(item); break; tmp_item = TAILQ_NEXT(item, entries); TAILQ_FOREACH(item, &my_tailq_head, ...
448 #define TAILQ_HEAD(name, type) \ 449 struct name { \ 450 struct type *tqh_first; /* first element */ \ 451 struct type **tqh_last; /* addr of last next element */ \ 452 TRACEBUF \ 453 } 这个宏实际上使用的时候,会展开成为一个结构体,tqh_first是一个一级指针,指向队列中的...
(elm)->field.tqe_prev = (head)->tqh_last;//将要插入的节点prev指向最后一个node 1.2 update head node: *(head)->tqh_last = (elm); (head)->tqh_last = &(elm)->field.tqe_next; 同理多个元素时尾插: 1.1 将要插入的node加入到尾部: ...
TAILQ_INSERT_HEAD(&Head_h, new_item, entry);//头插法插入新结点 } Entry* p;//用于遍历时保存当前结点 int i =0; cout <<"first : " << Head_h.tqh_first <<" first addr : " << &Head_h.tqh_first <<endl <<endl;//打印first的值以及first的地址 ...
而且直接使用一级指针效率也不低。不过这么做肯定有其道理,那么TAILQ中使用二级指针相比于直接用一级指针来说有什么好处呢?谢谢! #define TAILQ_HEAD(name, type) \ struct name { \ struct type *tqh_first; /* first element */ \ struct type **tqh_last; /* addr of last next element */ \ }...
TAILQ_FOREACH(var, head, field) 其中,var是指向每个元素的指针,head是尾列队的指针,field是尾列队结构体中指向下一个元素的指针的名称。使用该宏可以遍历整个尾列队,对于尾列队中的每个元素,宏会将var指针指向该元素,并执行后续的代码。示例代码如下: ```c struct element { int value; TAILQ_ENTRY(element)...