summaryrefslogtreecommitdiff
path: root/stack_optimization.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 /stack_optimization.c
parentedede8f8fd0ef6a51271bd7c12a784d9acbad7a8 (diff)
downloadpush_swap-4545c9f4dc339e94bf6ebe0963db55e9dcc131bd.tar.gz
push_swap-4545c9f4dc339e94bf6ebe0963db55e9dcc131bd.zip
Change stacks from linked lists to rotating arrays
Diffstat (limited to 'stack_optimization.c')
-rw-r--r--stack_optimization.c89
1 files changed, 45 insertions, 44 deletions
diff --git a/stack_optimization.c b/stack_optimization.c
index 2270896..eabf04a 100644
--- a/stack_optimization.c
+++ b/stack_optimization.c
@@ -6,17 +6,36 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/13 15:25:05 by dkaiser #+# #+# */
-/* Updated: 2024/04/15 12:03:44 by dkaiser ### ########.fr */
+/* Updated: 2024/04/15 16:20:51 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "push_swap.h"
+#include <stdlib.h>
-static void sort_array(int size, int *tmp_array)
+static int *copy_stack(int *stack, int size)
{
- int i;
- int k;
- int tmp;
+ int i;
+ int *cpy;
+
+ cpy = malloc(sizeof(int) * size);
+ if (!cpy)
+ return NULL;
+ i = 0;
+ while (i < size)
+ {
+ cpy[i] = stack[i];
+ i++;
+ }
+
+ return cpy;
+}
+
+static void sort_stack(int *stack, int size)
+{
+ int i;
+ int k;
+ int tmp;
i = 0;
while (i < size - 1)
@@ -24,11 +43,11 @@ static void sort_array(int size, int *tmp_array)
k = i + 1;
while (k < size)
{
- if (tmp_array[i] > tmp_array[k])
+ if (stack[i] > stack[k])
{
- tmp = tmp_array[i];
- tmp_array[i] = tmp_array[k];
- tmp_array[k] = tmp;
+ tmp = stack[i];
+ stack[i] = stack[k];
+ stack[k] = tmp;
}
k++;
}
@@ -36,49 +55,31 @@ static void sort_array(int size, int *tmp_array)
}
}
-static void override_stack(t_list **stack, int *tmp_array)
+static void override_stack(int *stack, int *tmp_stack, int size)
{
- t_list *cur;
- int content;
- int i;
+ int i;
+ int k;
- cur = *stack;
- while (cur)
+ i = 0;
+ while (i < size)
{
- i = 0;
- content = *(int *)cur->content;
- while (content != tmp_array[i])
- i++;
- *(int *)cur->content = i;
- cur = cur->next;
+ k = 0;
+ while (stack[i] != tmp_stack[k])
+ k++;
+ stack[i] = k;
+ i++;
}
}
-int stack_optimize(t_list **stack)
+int stack_optimize(t_stack *stack)
{
- int size;
- int *tmp_array;
- t_list *cur;
- int i;
+ int *tmp_stack;
- size = ft_lstsize(*stack);
- cur = *stack;
- tmp_array = malloc(size * sizeof(int));
- if (!tmp_array)
+ tmp_stack = copy_stack(stack->stack, stack->size);
+ if (!tmp_stack)
return 1;
- i = 0;
- while (cur)
- {
- tmp_array[i++] = *(int *)cur->content;
- cur = cur->next;
- }
- if (i != size)
- {
- free(tmp_array);
- return 1;
- }
- sort_array(size, tmp_array);
- i = 0;
- override_stack(stack, tmp_array);
+ sort_stack(tmp_stack, stack->size);
+ override_stack(stack->stack, tmp_stack, stack->size);
+ free(tmp_stack);
return 0;
}