From 4545c9f4dc339e94bf6ebe0963db55e9dcc131bd Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Mon, 15 Apr 2024 17:54:43 +0200 Subject: Change stacks from linked lists to rotating arrays --- stack_utils.c | 83 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 25 deletions(-) (limited to 'stack_utils.c') 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 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"); } -- cgit v1.2.3