From 59cc8a63a8da967e2b2847fd40d5946cf7e5bece Mon Sep 17 00:00:00 2001 From: Kapliuk Date: Thu, 14 Mar 2024 14:03:03 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BD=D0=BE=D0=B2=D0=B8=D1=82=D0=B8=20'c?= =?UTF-8?q?v4/list=5Fops.c'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cv4/list_ops.c | 98 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/cv4/list_ops.c b/cv4/list_ops.c index f3b8fee..ae8cfb3 100644 --- a/cv4/list_ops.c +++ b/cv4/list_ops.c @@ -1,57 +1,87 @@ #include "list_ops.h" +#include "test-framework/unity.h" +#include +#include #include -list_t *new_list(size_t length, list_element_t elements[]){ - list_t* list = (list_t*)malloc(sizeof(list_t) + length * sizeof(list_element_t)); - list->length = length; - memcpy(list->elements,elements, length*sizeof(list_element_t)); -<<<<<<< HEAD - free(list); - return list; +list_t *new_list(size_t length, list_element_t elements[]) { + list_t *list = malloc(sizeof(list_t) + length * sizeof(list_element_t)); + list->length = length; + for (int i = 0; i < length; i++) { + list->elements[i] = elements[i]; + } + return list; } -list_t *append_list(list_t *list1, list_t *list2){ - - return list2; - +list_t *append_list(list_t *list1, list_t *list2) { + list_t *list3 = malloc(sizeof(list_t) + (list1->length + list2->length) * sizeof(list_element_t)); + memcpy(list3,list1,sizeof(list_t)); + for(size_t i = sizeof(list_t); i < (sizeof(list_t) + (list1->length + list2->length));i++){ + list3->elements[i] = list2->elements[i]; + } + return list3; } -list_t *filter_list(list_t *list, bool (*filter)(list_element_t)){ - return NULL; - +list_t *filter_list(list_t *list, bool (*predicate)(list_element_t)) { + list_element_t filter[list->length]; + int counter = 0; + for(int i = 0; i < list->length;i++){ + if(predicate(list->elements[i])){ + filter[counter] = list->elements[i]; + counter++; + } + } + list_t *result = malloc(list->length); + for(int i = 0;i < list->length;i++) + result->elements[i] = filter[i]; + return result; } -size_t length_list(list_t *list){ - return 0; - +size_t length_list(list_t *list) { + return list->length; } -list_t *map_list(list_t *list, list_element_t (*map)(list_element_t)){ - return NULL; +list_t *map_list(list_t *list, list_element_t (*mapper)(list_element_t)) { + for (int i = 0; i < list->length; i++) { + list->elements[i] = mapper(list->elements[i]); + } + return list; } -list_element_t foldl_list(list_t *list, list_element_t initial, - list_element_t (*foldl)(list_element_t, - list_element_t)){ - list_element_t res=0; - return res; + +list_element_t foldl_list(list_t *list, list_element_t initial, list_element_t (*folder)(list_element_t, list_element_t)) { + list_element_t accumulator = initial; + + for (size_t i = 0; i < list->length; i++) { + accumulator = folder(accumulator, list->elements[i]); + } + + return accumulator; } -list_element_t foldr_list(list_t *list, list_element_t initial, - list_element_t (*foldr)(list_element_t, - list_element_t)){ - list_element_t res=0; - return res; - +list_element_t foldr_list(list_t *list, list_element_t initial, list_element_t (*folder)(list_element_t, list_element_t)) { + list_element_t accumulator = initial; + + for (size_t i = list->length; i > 0; i--) { + accumulator = folder(list->elements[i - 1], accumulator); + } + + return accumulator; } -list_t *reverse_list(list_t *list){ - return NULL; +list_t *reverse_list(list_t *list) { + list_t *list2 = malloc(list->length); + for (size_t i = 0; i < list->length; i++) { + list2->elements[i] = list->elements[list->length - i - 1]; + } + return list2; } -void delete_list(list_t *list){ - +void delete_list(list_t *list) { + if (list != NULL) { + free(list); + } } \ No newline at end of file