TAILQ(3) Library Functions Manual TAILQ(3) TAILQ_CONCAT, TAILQ_EMPTY, TAILQ_ENTRY, TAILQ_FIRST, TAILQ_FOREACH, TAILQ_FOREACH_REVERSE, TAILQ_HEAD, TAILQ_HEAD_INITIALIZER, TAILQ_INIT, TAILQ_INSERT_AFTER, TAILQ_INSERT_BEFORE, TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, TAILQ_LAST, TAILQ_NEXT, TAILQ_PREV, TAILQ_REMOVE - (libc -lc) #include TAILQ_ENTRY(TYPE); TAILQ_HEAD(HEADNAME, TYPE); TAILQ_HEAD TAILQ_HEAD_INITIALIZER(TAILQ_HEAD head); void TAILQ_INIT(TAILQ_HEAD *head); int TAILQ_EMPTY(TAILQ_HEAD *head); void TAILQ_INSERT_HEAD(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME); void TAILQ_INSERT_TAIL(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME); void TAILQ_INSERT_BEFORE(struct TYPE *listelm, struct TYPE *elm, TAILQ_ENTRY NAME); void TAILQ_INSERT_AFTER(TAILQ_HEAD *head, struct TYPE *listelm, struct TYPE *elm, TAILQ_ENTRY NAME); struct TYPE *TAILQ_FIRST(TAILQ_HEAD *head); struct TYPE *TAILQ_LAST(TAILQ_HEAD *head, HEADNAME); struct TYPE *TAILQ_PREV(struct TYPE *elm, HEADNAME, TAILQ_ENTRY NAME); struct TYPE *TAILQ_NEXT(struct TYPE *elm, TAILQ_ENTRY NAME); TAILQ_FOREACH(struct TYPE *var, TAILQ_HEAD *head, TAILQ_ENTRY NAME); TAILQ_FOREACH_REVERSE(struct TYPE *var, TAILQ_HEAD *head, HEADNAME, TAILQ_ENTRY NAME); void TAILQ_REMOVE(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME); void TAILQ_CONCAT(TAILQ_HEAD *head1, TAILQ_HEAD *head2, TAILQ_ENTRY NAME); . TYPE TAILQ_ENTRY NAME. HEADNAME TAILQ_HEAD(). TAILQ_HEAD(). . . . TAILQ_HEAD : TAILQ_HEAD(HEADNAME, TYPE) head; struct HEADNAME struct TYPE . : struct HEADNAME *headp; ( head headp .) TAILQ_ENTRY() . TAILQ_HEAD_INITIALIZER() head. TAILQ_INIT() TAILQ_EMPTY() . head. TAILQ_INSERT_HEAD() elm . TAILQ_INSERT_TAIL() elm . TAILQ_INSERT_BEFORE() elm listelm. TAILQ_INSERT_AFTER() elm listelm. TAILQ_FIRST() NULL . TAILQ_LAST() . NULL. TAILQ_PREV() NULL . TAILQ_NEXT() NULL . TAILQ_FOREACH() head var. var NULL . TAILQ_FOREACH_REVERSE() head var. TAILQ_REMOVE() elm . TAILQ_CONCAT() head2 head1 . TAILQ_EMPTY() . TAILQ_FIRST() TAILQ_LAST() TAILQ_PREV() TAILQ_NEXT() TYPE . TAILQ_HEAD_INITIALIZER() head. BSD. 4.4BSD. TAILQ_FOREACH() TAILQ_FOREACH_REVERSE() var . TAILQ_FOREACH_SAFE() TAILQ_FOREACH_REVERSE_SAFE() BSD glibc var . #include #include #include #include struct entry { int data; TAILQ_ENTRY(entry) entries; /* Tail queue */ }; TAILQ_HEAD(tailhead, entry); int main(void) { struct entry *n1, *n2, *n3, *np; struct tailhead head; /* Tail queue head */ int i; TAILQ_INIT(&head); /* Initialize the queue */ n1 = malloc(sizeof(struct entry)); /* Insert at the head */ TAILQ_INSERT_HEAD(&head, n1, entries); n1 = malloc(sizeof(struct entry)); /* Insert at the tail */ TAILQ_INSERT_TAIL(&head, n1, entries); n2 = malloc(sizeof(struct entry)); /* Insert after */ TAILQ_INSERT_AFTER(&head, n1, n2, entries); n3 = malloc(sizeof(struct entry)); /* Insert before */ TAILQ_INSERT_BEFORE(n2, n3, entries); TAILQ_REMOVE(&head, n2, entries); /* Deletion */ free(n2); /* Forward traversal */ i = 0; TAILQ_FOREACH(np, &head, entries) np->data = i++; /* Reverse traversal */ TAILQ_FOREACH_REVERSE(np, &head, tailhead, entries) printf("%i\n", np->data); /* TailQ deletion */ n1 = TAILQ_FIRST(&head); while (n1 != NULL) { n2 = TAILQ_NEXT(n1, entries); free(n1); n1 = n2; } TAILQ_INIT(&head); exit(EXIT_SUCCESS); } insque(3) queue(7) 3 . . : . 6.18 17 2025 TAILQ(3)