diff options
| author | Dominik Kaiser | 2024-04-15 17:54:43 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-04-15 17:54:43 +0200 |
| commit | 4545c9f4dc339e94bf6ebe0963db55e9dcc131bd (patch) | |
| tree | ef13af63281b0c7b08b48ade575bec87031055d2 /input_handling.c | |
| parent | edede8f8fd0ef6a51271bd7c12a784d9acbad7a8 (diff) | |
| download | push_swap-4545c9f4dc339e94bf6ebe0963db55e9dcc131bd.tar.gz push_swap-4545c9f4dc339e94bf6ebe0963db55e9dcc131bd.zip | |
Change stacks from linked lists to rotating arrays
Diffstat (limited to 'input_handling.c')
| -rw-r--r-- | input_handling.c | 79 |
1 files changed, 42 insertions, 37 deletions
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 <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/12 17:31:49 by dkaiser #+# #+# */ -/* Updated: 2024/04/13 14:58:42 by dkaiser ### ########.fr */ +/* Updated: 2024/04/15 16:24:51 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ +#include "libft/libft.h" #include "push_swap.h" static int is_nbr(char *str) @@ -36,61 +37,65 @@ static int is_input_only_nbrs(int argc, char *argv[]) return (1); } -static int are_numbers_unique(t_list *stack) +static int are_numbers_unique(int *stack, int size) { - t_list *cmp_elem; + int i; + int k; - while (stack->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); } |
