#include #include #include "sl_list.h" // business logic for name list void delete_name(void* ptr); void print_name_list(sl_list* list); void add_name_to_node(sl_node* node, const char* name); void remove_name(sl_list* list, const char* name); int main(int argc, char** argv) { sl_list name_list; sl_node *nd; sl_list_init(&name_list, delete_name); print_name_list(&name_list); nd = sl_list_push_front(&name_list); add_name_to_node(nd, "Elephant Man"); print_name_list(&name_list); nd = sl_list_insert_after(&name_list, 0); add_name_to_node(nd, "Ali Babba"); print_name_list(&name_list); nd = sl_list_insert_after(&name_list, nd); add_name_to_node(nd, "Bob Barker"); print_name_list(&name_list); nd = sl_list_insert_after(&name_list, nd); add_name_to_node(nd, "Captain Kangaroo"); print_name_list(&name_list); nd = sl_list_insert_after(&name_list, nd); add_name_to_node(nd, "Darth Vader"); print_name_list(&name_list); sl_list_reverse(&name_list); print_name_list(&name_list); remove_name(&name_list, "Captain Kangaroo"); print_name_list(&name_list); nd = sl_list_pop_front(&name_list); free(nd->data); free(nd); print_name_list(&name_list); sl_list_clear(&name_list); print_name_list(&name_list); nd = sl_list_insert_after(&name_list, 0); add_name_to_node(nd, "Michael Jordan"); nd = sl_list_insert_after(&name_list, nd); add_name_to_node(nd, "Scottie Pippen"); print_name_list(&name_list); sl_list_destroy(&name_list); return 0; } void delete_name(void* ptr) { free(ptr); } void print_name_list(sl_list* list) { fprintf(stdout, "-----------------------\n"); fprintf(stdout, "size = %d -- empty = %d\n", sl_list_size(list), sl_list_empty(list)); sl_node* iter = list->head; while(iter) { fprintf(stdout, "%s\n", (char*)iter->data); iter = iter->next; } fprintf(stdout, "-----------------------\n"); } void add_name_to_node(sl_node* node, const char* name) { char* node_string; if (!node) { fprintf(stderr, "error on memory allocation\n"); exit(1); } node->data = malloc(strlen(name) + 1); if (!node->data) { fprintf(stderr, "error on memory allocation\n"); exit(1); } node_string = (char*)node->data; strcpy(node_string, name); } void remove_name(sl_list* list, const char* name) { char* str; sl_node *iter, *prev; iter = list->head; prev = 0; while(iter) { if (strcmp((char*)iter->data, name) == 0 ) break; prev = iter; iter = iter->next; } // found the item that needs to be removed if (iter) { iter = sl_list_remove_after(list, prev); free(iter->data); free(iter); } }