summaryrefslogtreecommitdiff
path: root/stack_utils.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_utils.c
parentedede8f8fd0ef6a51271bd7c12a784d9acbad7a8 (diff)
downloadpush_swap-4545c9f4dc339e94bf6ebe0963db55e9dcc131bd.tar.gz
push_swap-4545c9f4dc339e94bf6ebe0963db55e9dcc131bd.zip
Change stacks from linked lists to rotating arrays
Diffstat (limited to 'stack_utils.c')
-rw-r--r--stack_utils.c83
1 files changed, 58 insertions, 25 deletions
diff --git a/stack_utils.c b/stack_utils.c
index ad14504..ac5c63c 100644
--- a/stack_utils.c
+++ b/stack_utils.c
@@ -6,48 +6,81 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/12 20:31:30 by dkaiser #+# #+# */
-/* Updated: 2024/04/13 14:33:35 by dkaiser ### ########.fr */
+/* Updated: 2024/04/15 17:27:04 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "push_swap.h"
-void stack_swap(t_list **stack)
+void stack_swap(t_stack *stack)
{
- t_list *first_elem;
+ int tmp;
- first_elem = *stack;
- *stack = (*stack)->next;
- first_elem->next = (*stack)->next;
- (*stack)->next = first_elem;
+ if (stack->size > 1)
+ {
+ tmp = stack->stack[0];
+ stack->stack[0] = stack->stack[1];
+ stack->stack[1] = tmp;
+ }
}
-void stack_push(t_list **dst_stack, t_list **src_stack)
+void stack_push(t_stack *dst_stack, t_stack *src_stack)
{
- t_list *elem;
+ int i;
- elem = *src_stack;
- *src_stack = elem->next;
- ft_lstadd_front(dst_stack, elem);
+ i = dst_stack->size - 1;
+ while (i > 0)
+ {
+ dst_stack->stack[i] = dst_stack->stack[i-1];
+ i--;
+ }
+ dst_stack->stack[0] = src_stack->stack[0];
+ dst_stack->size++;
+ i = 1;
+ while (i < src_stack->size)
+ {
+ src_stack->stack[i-1] = src_stack->stack[i];
+ i++;
+ }
+ src_stack->size--;
}
-void stack_rotate(t_list **stack)
+void stack_rotate(t_stack *stack)
{
- t_list *first_elem;
+ int tmp;
+ int i;
- first_elem = *stack;
- *stack = (*stack)->next;
- first_elem->next = NULL;
- ft_lstlast(*stack)->next = first_elem;
+ tmp = stack->stack[0];
+ i = 1;
+ while (i < stack->size)
+ {
+ stack->stack[i-1] = stack->stack[i];
+ i++;
+ }
+ stack->stack[i-1] = tmp;
}
-void stack_rrotate(t_list **stack)
+void stack_rrotate(t_stack *stack)
{
- t_list *first_elem;
+ int tmp;
+ int i;
- first_elem = *stack;
- while ((*stack)->next->next)
- *stack = (*stack)->next;
- (*stack)->next->next = first_elem;
- (*stack)->next = NULL;
+ i = stack->size - 1;
+ tmp = stack->stack[i];
+ while (i > 0)
+ {
+ stack->stack[i] = stack->stack[i-1];
+ i--;
+ }
+ stack->stack[0] = tmp;
+}
+
+void stack_print(t_stack *stack)
+{
+ int i;
+
+ i = 0;
+ while (i < stack->size)
+ ft_printf("%d ", stack->stack[i++]);
+ ft_printf("\n");
}