summaryrefslogtreecommitdiff
path: root/input_handling.c
diff options
context:
space:
mode:
authorDominik Kaiser2024-04-15 17:54:43 +0200
committerDominik Kaiser2024-04-15 17:54:43 +0200
commit4545c9f4dc339e94bf6ebe0963db55e9dcc131bd (patch)
treeef13af63281b0c7b08b48ade575bec87031055d2 /input_handling.c
parentedede8f8fd0ef6a51271bd7c12a784d9acbad7a8 (diff)
downloadpush_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.c79
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);
}