From 4545c9f4dc339e94bf6ebe0963db55e9dcc131bd Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Mon, 15 Apr 2024 17:54:43 +0200 Subject: Change stacks from linked lists to rotating arrays --- input_handling.c | 79 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 37 deletions(-) (limited to 'input_handling.c') diff --git a/input_handling.c b/input_handling.c index 7699671..078ab7f 100644 --- a/input_handling.c +++ b/input_handling.c @@ -6,10 +6,11 @@ /* By: dkaiser next) + i = 0; + while (i < size - 1) { - cmp_elem = stack->next; - while (cmp_elem) + k = i + 1; + while (k < size) { - if (*(int *)stack->content == *(int *)cmp_elem->content) + if (stack[i] == stack[k]) return (0); - cmp_elem = cmp_elem->next; + k++; } - stack = stack->next; + i++; } + return (1); } -static t_list *get_stack_from_input(int argc, char *argv[]) +static int *get_array_from_input(int argc, char *argv[]) { - t_list *result; - t_list *cur; - int *content; + int *stack; + int i; - result = NULL; - while (argc-- > 1) + stack = malloc(sizeof(int) * (argc - 1)); + if (!stack) + return NULL; + + i = 0; + while (i < argc - 1) { - content = malloc(sizeof(int)); - if (content) - { - *content = ft_atoi(argv[argc]); - cur = ft_lstnew(content); - if (cur) - { - ft_lstadd_front(&result, cur); - continue ; - } - free(content); - } - ft_lstclear(&result, free); - return (NULL); + stack[i] = ft_atoi(argv[i + 1]); + i++; } - return (result); + + return (stack); } -t_list *create_stack(int argc, char *argv[]) +t_stack *create_stack(int argc, char *argv[]) { - t_list *result; + t_stack *result; - if (!is_input_only_nbrs(argc, argv)) - return (NULL); - result = get_stack_from_input(argc, argv); + result = malloc(sizeof(t_stack)); if (!result) + return NULL; + if (!is_input_only_nbrs(argc, argv)) + return (free(result), NULL); + result->stack = get_array_from_input(argc, argv); + if (!result->stack) + return (free(result), NULL); + if (!are_numbers_unique(result->stack, argc - 1)) + { + free(result->stack); + free(result); return (NULL); - if (!are_numbers_unique(result)) - ft_lstclear(&result, free); + } + result->size = argc - 1; + return (result); } -- cgit v1.2.3