struct block { block *prev; block *next; // data goes here int data; }; struct list { block *start; block *end; int length; }; // list operations: // list_unlink: unlinks the last block in the list, and returns a pointer to it block *list_unlink (list *l); // list_link: links the block b onto the end of the list void list_link (list *l, block *b); // list_init: links an array of blocks onto the end of a list void list_init (list *l, block *m, int size); // list_print: prints a list void list_print (list *l);