diff --git a/ex3/ex3.c b/ex3/ex3.c index 018179c9ff966610cb8a586f6be4b9fb67559f4c..121f18b4d9bb18787f206dae60e56e4f25417dd1 100644 --- a/ex3/ex3.c +++ b/ex3/ex3.c @@ -9,23 +9,35 @@ * */ -#include <math.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> -#include <string.h> // LinkedListNode.h + typedef struct LinkedListNode { struct LinkedListNode *next; int32_t value; } LinkedListNode; +/** + * @brief Creation of a new node. + * + * @param value + * @return LinkedListNode* + */ LinkedListNode *linked_list_node_new(int32_t value); + +/** + * @brief Deletion of a node. + * + * @param node + */ void linked_list_node_delete(LinkedListNode **node); // LinkedListNode.c + LinkedListNode *linked_list_node_new(int32_t value) { LinkedListNode *node = (LinkedListNode *)malloc(sizeof(LinkedListNode)); @@ -41,20 +53,78 @@ void linked_list_node_delete(LinkedListNode **node) { } // LinkedList.h + typedef struct { LinkedListNode *root; } LinkedList; +/** + * @brief Creation of a new linked list. + * + * @return LinkedList* + */ LinkedList *linked_list_new(); + +/** + * @brief Deletion of the linked list. + * + * @param list + */ void linked_list_delete(LinkedList **list); + +/** + * @brief Count the number of nodes in the list. + * + * @param list + * @return int32_t + */ int32_t linked_list_count(LinkedList *list); + +/** + * @brief Checks if the list is empty or not. + * + * @param list + * @return true + * @return false + */ bool linked_list_is_empty(LinkedList *list); + +/** + * @brief Adds a value at the end of the list. + * + * @param list + * @param value + * @return LinkedListNode* + */ LinkedListNode *linked_list_add_last(LinkedList *list, int32_t value); + +/** + * @brief Displays the list. + * + * @param list + */ void linked_list_print(LinkedList *list); + +/** + * @brief Inserts a value at the desired index, if the index does not exist does nothing. + * + * @param list + * @param index + * @param value + */ void linked_list_insert_at_index(LinkedList *list, int32_t index, int32_t value); + +/** + * @brief Retrieves the value at the specified index. + * + * @param list + * @param index + * @return int32_t + */ int32_t linked_list_peek_at_index(LinkedList *list, int32_t index); // LinkedList.c + LinkedList *linked_list_new() { LinkedList *list = (LinkedList *)malloc(sizeof(LinkedList)); @@ -156,38 +226,48 @@ int32_t linked_list_peek_at_index(LinkedList *list, int32_t index) { return current_node->value; } -LinkedList *compute_pascal_triangle_row(int32_t row_number) { +/** + * @brief Compute the desired line of Pascal's triangles. + * + * @param line_number + * @return LinkedList* + */ +LinkedList *compute_pascal_triangle_line(int32_t line_number) { LinkedList *list = linked_list_new(); + // Always 1 at the beginning. linked_list_add_last(list, 1); - if (row_number == 1) { + if (line_number == 1) { return list; } + // Always 1 at the end. linked_list_add_last(list, 1); - if (row_number == 2) { + if (line_number == 2) { return list; } - LinkedList *previous_row = compute_pascal_triangle_row(row_number - 1); + // Retrieves the previous line to calculate the new line. + LinkedList *previous_line = compute_pascal_triangle_line(line_number - 1); - for (int32_t i = 0; i < row_number - 2; i += 1) { - int32_t value = linked_list_peek_at_index(previous_row, i + 1); - value += linked_list_peek_at_index(previous_row, i); + // Calculates the values inside the line (ignores the first and last value). + for (int32_t i = 0; i < line_number - 2; i += 1) { + int32_t value = linked_list_peek_at_index(previous_line, i + 1); + value += linked_list_peek_at_index(previous_line, i); linked_list_insert_at_index(list, i + 1, value); } - linked_list_delete(&previous_row); + linked_list_delete(&previous_line); return list; } int main() { - int32_t row_number; - scanf("%d", &row_number); + int32_t line_number; + scanf("%d", &line_number); printf("\n"); - LinkedList *list = compute_pascal_triangle_row(row_number); + LinkedList *list = compute_pascal_triangle_line(line_number); linked_list_print(list); linked_list_delete(&list);