#include #include #include #include "ll.h" int main(int argc, char **argv) { Node *list = NULL, *tmp; char *hi = "hello"; char *bye = "goodbye"; char *dynamic_string = NULL, *ret = NULL; // Push two elements on the list. Note that // the memory that the variables 'hi' and 'bye' // point to is allocated and initialized to contain // the strings "hello" and "goodbye" when the program // is loaded; we don't have to worry about free()'ing // that memory as a result. list = Push(list, (void *) hi); list = Push(list, (void *) bye); // Dynamically allocate some memory for a third // element -- the string "yo!". We need four // bytes to store this string (remember there is a // NULL character '\0' at the end of a string). dynamic_string = (char *) malloc(4*sizeof(char)); assert(dynamic_string != NULL); dynamic_string[0] = 'y'; dynamic_string[1] = 'o'; dynamic_string[2] = '!'; dynamic_string[3] = '\0'; list = Push(list, (void *) dynamic_string); // Iterate through the list. tmp = list; while (tmp != NULL) { printf("Payload: '%s'\n", (char *) (tmp->element)); tmp = tmp->next; } // Pop the first element off the list. This // should be our dynamically allocated string. ret = Pop(list, &list); assert(ret == dynamic_string); // free the memory that we previously malloc'ed // to hold the "yo!" string. free(ret); // pop the other two elements off the list. ret = Pop(list, &list); assert(ret == bye); ret = Pop(list, &list); assert(ret == hi); return 0; }