int test_delete_last() { const char *test_name = __func__; struct llist *list1; struct llist *list2; struct list_elem *el; list1 = create_llist(); append_element(list1, "omega"); list2 = delete_after(list1, -1, 1); /* check list1 */ if (0 != list1->count) { printf ("%s: expected count of 0, got %d.\n", test_name, list1->count); return 1; } if (NULL != list1->head) { printf ("%s: expected NULL head, got '%s'.\n", test_name, (char *) list1->head->data); return 1; } if (NULL != list1->tail) { printf ("%s: expected NULL tail, got '%s'.\n", test_name, (char *) list1->tail->data); return 1; } /* check list2 */ if (1 != list2->count) { printf ("%s: expected count of 1, got %d.\n", test_name, list2->count); return 1; } el = list2->head; if (strcmp("omega", (char *) el->data) != 0) { printf ("%s: expected 'omega' at head, got '%s'.\n", test_name, (char *) el->data); return 1; } el = list2->tail; if (strcmp("omega", (char *) el->data) != 0) { printf ("%s: expected 'omega' at tail, got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (NULL != el) { printf ("%s: expected NULL next, got '%s'.\n", test_name, (char *) el->data); return 1; } printf("%s ok.\n", test_name); return 0; }
void main() { int opt; clrscr(); do { clrscr(); printf("\npress 1 for insert beg:"); printf("\npress 2 for insert end:"); printf("\npress 3 for insert after:"); printf("\npress 4 for insert before:"); printf("\npress 5 for delete beg:"); printf("\npress 6 for delete end:"); printf("\nlpress 7 for delete after :"); printf("\npress 8 for delete before:"); printf("\npress 9 for deleter that:"); printf("\npress 10 for delete odd:"); printf("\npress 11 for delete even:"); printf("\npress 12 for sorting:"); printf("\npress 13 for reverse:"); printf("\npress 14 for insert in sorted order ;"); printf("\npress 15 for display"); printf("\nenter the option:"); scanf("%d",&opt); switch(opt) { case 1:insert_beg(&ptr); break; case 2:insert_end(&ptr);break; case 3:insert_after(&ptr);break; case 4:insert_before(&ptr);break; case 5:delete_beg(&ptr); break; case 6:delete_end(&ptr);break; case 7:delete_after(&ptr);break; case 8:delete_before(&ptr);break; /**/ case 9:delete_that(&ptr);break; case 10:delete_alter_odd(&ptr);break; case 11:delete_alter_even(&ptr);break; case 12:sort(&ptr);break; case 13:reverse(&ptr);break; /**/ case 14:insert_sort(&ptr);break; case 15:display(&ptr);break; } getch(); }while(opt!=99); getch(); }
void josephus(int n, int m) { /* solve josephus problem, n nodes, step m */ node *t; int i; insert_nodes(n); t = head; printf("\nAnswer : "); while (t != t->next) { for (i = 0; i < m-1; i++) t = t->next; printf("%d ", t->next->key); delete_after(t); } printf("%d", t->key); /* print last node */ }
int test_delete_last_few() { const char *test_name = __func__; struct llist *list1; struct llist *list2; struct list_elem *el; list1 = create_llist(); append_element(list1, "ichi"); append_element(list1, "ni"); append_element(list1, "san"); append_element(list1, "shi"); append_element(list1, "go"); list2 = delete_after(list1, -1, 5); /* check list1 */ if (0 != list1->count) { printf ("%s: expected count of 0, got %d.\n", test_name, list1->count); return 1; } if (NULL != list1->head) { printf ("%s: expected NULL head, got '%s'.\n", test_name, (char *) list1->head->data); return 1; } if (NULL != list1->tail) { printf ("%s: expected NULL tail, got '%s'.\n", test_name, (char *) list1->tail->data); return 1; } /* check list2 */ if (5 != list2->count) { printf ("%s: expected count of 5, got %d.\n", test_name, list2->count); return 1; } el = list2->head; if (strcmp("ichi", (char *) el->data) != 0) { printf ("%s: expected 'ichi' at head, got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("ni", (char *) el->data) != 0) { printf ("%s: expected 'ni', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("san", (char *) el->data) != 0) { printf ("%s: expected 'san', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("shi", (char *) el->data) != 0) { printf ("%s: expected 'shi', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("go", (char *) el->data) != 0) { printf ("%s: expected 'go', got '%s'.\n", test_name, (char *) el->data); return 1; } el = list2->tail; if (strcmp("go", (char *) el->data) != 0) { printf ("%s: expected 'go' at tail, got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (NULL != el) { printf ("%s: expected NULL next, got '%s'.\n", test_name, (char *) el->data); return 1; } printf("%s ok.\n", test_name); return 0; }
int test_delete_at_tail() { const char *test_name = "test_delete_at_tail"; struct llist *list1; struct llist *list2; struct list_elem *el; list1 = create_llist(); append_element(list1, "yksi"); append_element(list1, "kaksi"); append_element(list1, "kolme"); append_element(list1, "neljä"); append_element(list1, "viisi"); append_element(list1, "kuusi"); append_element(list1, "seitsemän"); append_element(list1, "kahdeksan"); append_element(list1, "yhdeksän"); append_element(list1, "kymmenen"); list2 = delete_after(list1, 6, 3); /* check list1 */ if (7 != list1->count) { printf ("%s: expected count of 7, got %d.\n", test_name, list1->count); return 1; } el = list1->head; if (strcmp("yksi", (char *) el->data) != 0) { printf ("%s: expected 'yksi', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("kaksi", (char *) el->data) != 0) { printf ("%s: expected 'kaksi', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("kolme", (char *) el->data) != 0) { printf ("%s: expected 'kolme', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("neljä", (char *) el->data) != 0) { printf ("%s: expected 'neljä', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("viisi", (char *) el->data) != 0) { printf ("%s: expected 'viisi', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("kuusi", (char *) el->data) != 0) { printf ("%s: expected 'kuusi', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("seitsemän", (char *) el->data) != 0) { printf ("%s: expected 'seitsemän', got '%s'.\n", test_name, (char *) el->data); return 1; } if (strcmp("seitsemän", (char *) list1->tail->data) != 0) { printf ("%s: expexted list tail to be 'seitsemän', got '%s'.\n", test_name, (char *) list1->tail->data); return 1; } if (NULL != list1->tail->next) { printf ("%s: list1 is not terminated.\n", test_name); return 1; } /* check list2 */ if (3 != list2->count) { printf ("%s: expected count of 3, got %d.\n", test_name, list2->count); return 1; } el = list2->head; if (strcmp("kahdeksan", (char *) el->data) != 0) { printf ("%s: expected 'kahdeksan', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("yhdeksän", (char *) el->data) != 0) { printf ("%s: expected 'yhdeksän', got '%s'.\n", test_name, (char *) el->data); return 1; } el = el->next; if (strcmp("kymmenen", (char *) el->data) != 0) { printf ("%s: expected 'kymmenen', got '%s'.\n", test_name, (char *) el->data); return 1; } if (strcmp("kymmenen", (char *) list2->tail->data) != 0) { printf ("%s: expexted list tail to be 'kymmenen', got '%s'.\n", test_name, (char *) list2->tail->data); return 1; } if (NULL != list2->tail->next) { printf ("%s: list2 is not terminated.\n", test_name); return 1; } printf("%s ok.\n", test_name); return 0; }