int main() { AssocList *alist = alist_create((CmpFunc)strcmp); alist_put(alist, strdup("John"), strdup("+1-234-567-89-10")); alist_put(alist, strdup("Alex"), strdup("911")); alist_put(alist, strdup("Mike"), strdup("112")); for (;;) { char *name = read_string("Enter name, 'q' to exit"); if (strcmp(name, "q") == 0) { break; } else { char *number = alist_get(alist, name); char *update_answer; if (number == NULL) { printf("%s not found.\n", name); update_answer = read_string("Add? [y/n]"); } else { printf("%s: %s\n", name, number); update_answer = read_string("Update? [y/n]"); } if (update_answer[0] == 'y' || update_answer[0] == 'Y') { number = read_string("Enter phone number"); alist_put(alist, strdup(name), number); printf("%s: %s\n", name, number); } free(update_answer); free(name); } } printf("\nYour phonebook:\n"); alist_foreach(alist, print_phonebook_entry); alist_foreach(alist, free_key_and_value); alist_destroy(alist); return 0; }
void stress_test_alist(int amt) { alist al; int i; gendata x, y; al = alist_create(); assert(alist_empty(al)); printf("Creating an association list with %d items...\n", amt); for (i = 0; i < amt; ++i) { x.num = y.num = i; al = alist_insert_uniq(al, x, y, num_eq); assert(!alist_empty(al)); alist_lookup(al, x, num_eq, &y); assert(x.num == y.num); } y.ptr = NULL; printf("Walking an association list of %d items...\n", amt); alist_walk(al, walker, y); printf("Deleting %d items from the association list...\n", amt); for (i = 0; i < amt; ++i) { /* Inserting an item that's already there should fail */ x.num = i; y.num = i; /* Value does not matter */ assert(alist_insert_uniq(al, x, y, num_eq) == NULL); al = alist_delete(al, x, num_eq, NULL, NULL); } assert(alist_empty(al)); alist_destroy(al, NULL, NULL); }
void stack_destroy(stack_t** stack) { alist_destroy(stack); }