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 /stack_utils.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 'stack_utils.c')
| -rw-r--r-- | stack_utils.c | 83 |
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"); } |
