Lists are the most basic data structures Everybody is implementing lists all the time This is a trivial example, that reverses stdin lines to stdout struct str_item { char str[16]; struct str_item *next; }; #define list_insert(h, new) \ ({(new)->next = (h); (h) = (new);}) #define list_extract(h) \ ({struct int_item *res = (h); if (h) (h)=(h)->next; res;}) while (fgets(line, 16, stdin)) { item = malloc(sizeof(*item)); memcpy(item->str, line, sizeof(item->str)); list_insert(head, item); } while ( (item = list_extract(head)) ) { printf("%s", item->str); free(item); }