SLIST(3) Library Functions Manual SLIST(3) SLIST_EMPTY SLIST_ENTRY SLIST_FIRST SLIST_FOREACH SLIST_HEAD SLIST_HEAD_INITIALIZER SLIST_INIT SLIST_INSERT_AFTER SLIST_INSERT_HEAD SLIST_NEXT SLIST_REMOVE SLIST_REMOVE_HEAD - (libc -lc) #include SLIST_ENTRY(TYPE); SLIST_HEAD(HEADNAME, TYPE); SLIST_HEAD SLIST_HEAD_INITIALIZER(SLIST_HEAD head); void SLIST_INIT(SLIST_HEAD *head); int SLIST_EMPTY(SLIST_HEAD *head); void SLIST_INSERT_HEAD(SLIST_HEAD *head, struct TYPE *elm, SLIST_ENTRY NAME); void SLIST_INSERT_AFTER(struct TYPE *listelm, struct TYPE *elm, SLIST_ENTRY NAME); struct TYPE *SLIST_FIRST(SLIST_HEAD *head); struct TYPE *SLIST_NEXT(struct TYPE *elm, SLIST_ENTRY NAME); SLIST_FOREACH(struct TYPE *var, SLIST_HEAD *head, SLIST_ENTRY NAME); void SLIST_REMOVE(SLIST_HEAD *head, struct TYPE *elm, TYPE, SLIST_ENTRY NAME); void SLIST_REMOVE_HEAD(SLIST_HEAD *head, SLIST_ENTRY NAME); . TYPE SLIST_ENTRY NAME. HEADNAME SLIST_HEAD(). SLIST_HEAD(). . O(n) . . SLIST_HEAD : SLIST_HEAD(HEADNAME, TYPE) head; struct HEADNAME struct TYPE . : struct HEADNAME *headp; ( head headp .) SLIST_ENTRY() . SLIST_HEAD_INITIALIZER() head. SLIST_INIT() head. SLIST_EMPTY() . SLIST_INSERT_HEAD() elm . SLIST_INSERT_AFTER() elm listelm. SLIST_FIRST() NULL . SLIST_NEXT() . SLIST_FOREACH() head var. SLIST_REMOVE() elm . SLIST_REMOVE_HEAD() elm . SLIST_REMOVE() . SLIST_EMPTY() . SLIST_FIRST() SLIST_NEXT() TYPE . SLIST_HEAD_INITIALIZER() head. BSD. 4.4BSD. SLIST_FOREACH() var . SLIST_FOREACH_SAFE() BSD glibc var . #include #include #include #include struct entry { int data; SLIST_ENTRY(entry) entries; /* Singly linked list */ }; SLIST_HEAD(slisthead, entry); int main(void) { struct entry *n1, *n2, *n3, *np; struct slisthead head; /* Singly linked list head */ SLIST_INIT(&head); /* Initialize the queue */ n1 = malloc(sizeof(struct entry)); /* Insert at the head */ SLIST_INSERT_HEAD(&head, n1, entries); n2 = malloc(sizeof(struct entry)); /* Insert after */ SLIST_INSERT_AFTER(n1, n2, entries); SLIST_REMOVE(&head, n2, entry, entries);/* Deletion */ free(n2); n3 = SLIST_FIRST(&head); SLIST_REMOVE_HEAD(&head, entries); /* Deletion from the head */ free(n3); for (unsigned int i = 0; i < 5; i++) { n1 = malloc(sizeof(struct entry)); SLIST_INSERT_HEAD(&head, n1, entries); n1->data = i; } /* Forward traversal */ SLIST_FOREACH(np, &head, entries) printf("%i\n", np->data); while (!SLIST_EMPTY(&head)) { /* List deletion */ n1 = SLIST_FIRST(&head); SLIST_REMOVE_HEAD(&head, entries); free(n1); } SLIST_INIT(&head); exit(EXIT_SUCCESS); } insque(3) queue(7) 3 . . : . 6.18 17 2025 SLIST(3)