X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TP_9%2Fexo2%2Fclist.c;h=afdb00f6c12e84617d2d360dc331c8849dee94a5;hb=954256b7be7394db3b0b64c6a74fb5f79bec8b5e;hp=2e0352de109dfede2612bc175e0a6e9ab85c4c63;hpb=8f2b28438cb012169904a7fa1643977da5e40409;p=TD_C.git diff --git a/TP_9/exo2/clist.c b/TP_9/exo2/clist.c index 2e0352d..afdb00f 100644 --- a/TP_9/exo2/clist.c +++ b/TP_9/exo2/clist.c @@ -1,4 +1,6 @@ #include +#include +#include #include "clist.h" @@ -32,33 +34,40 @@ link_t* list_prepend(link_t* head, int value) { } link_t* list_insert(link_t* head, unsigned index, int value) { - link_t* link_insrt = list_new(value); - link_t* head_first = head; - //link_t* head_prev = NULL; - link_t* head_next = NULL; - for (unsigned i = 0; i < index; i++) { - head = head->next; + if (index == 0) { + return list_prepend(head, value); + } else if (index == list_count(head)) { + return list_append(head, value); + } else { + link_t* link_insrt = list_new(value); + link_t* head_first = head; + link_t* head_next = NULL; + for (unsigned i = 0; i < index-1; i++) { + head = head->next; + } + head_next = head->next; + head->next = link_insrt; + head = link_insrt; + head->next = head_next; + return head_first; } - //head_prev = head; - head->next = link_insrt; - head_next = head->next; - head = link_insrt; - head->next = head_next; - return head_first; } link_t* list_delete(link_t* head, unsigned index) { - link_t* head_first = head; link_t* head_prev = NULL; link_t* head_next = NULL; + link_t* head_ret = NULL; - if (index == 0) { + if (head == NULL) { + return NULL; + } else if (index == 0) { head_next = head->next; free(head); head = head_next; - return head; + head_ret = head; } else { + link_t* head_first = head; for (unsigned i = 0; i < index-1; i++) { head = head->next; } @@ -68,12 +77,49 @@ link_t* list_delete(link_t* head, unsigned index) { free(head); head = head_prev; head->next = head_next; - return head_first; + head_ret = head_first; + } + if (head_ret != NULL) { + return head_ret; + } else { + return NULL; + } +} + +link_t* list_concat(link_t* first, link_t* second) { + link_t* head_first = first; + + while (first->next != NULL) { + first = first->next; } + first->next = second; + return head_first; +} + +link_t* list_sort(link_t* head) { + int tmp; + bool isswaped; + link_t* head_first = head; + + do { + isswaped = false; + while (head->next != NULL) { + if (head->value > head->next->value) { + tmp = head->value; + head->value = head->next->value; + head->next->value = tmp; + isswaped = true; + } + head = head->next; + } + /* Reloop at the beginning of the list until there's values swaped */ + head = head_first; + } while (isswaped); + return head_first; } unsigned list_count(link_t* head) { - int count = 0; + unsigned count = 0; while (head != NULL) { ++count; @@ -106,12 +152,24 @@ int list_get(link_t* head, unsigned index) { } } -void list_clear(link_t* link) { +void list_clear(link_t* head) { link_t* next_link = NULL; - while (link != NULL) { - next_link = link->next; - free(link); - link = next_link; + while (head != NULL) { + next_link = head->next; + free(head); + head = next_link; + } +} + +void list_display_values(link_t* head) { + unsigned i = 0; + + printf("------Begin------\n"); + while (head != NULL) { + printf("value at [%d]=%d\n", i, head->value); + head = head->next; + i++; } + printf("------End------\n"); }