From 4f512191c705950e6d709e953bd2178be2592659 Mon Sep 17 00:00:00 2001 From: Marat Izmailov Date: Mon, 21 Oct 2024 11:43:13 +0000 Subject: [PATCH] Update cv4/a_train.c --- cv4/a_train.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/cv4/a_train.c b/cv4/a_train.c index 46997dc..196c22d 100644 --- a/cv4/a_train.c +++ b/cv4/a_train.c @@ -3,77 +3,88 @@ #include #include - +// Функция для добавления нового вагона в поезд struct car* add_car(struct car* first, const char* target) { - struct car* newcar = (struct car*)calloc(1, sizeof(struct car)); + struct car* newcar = (struct car*)calloc(1, sizeof(struct car)); // Выделение памяти для нового вагона if (newcar == NULL) { - printf("Chyba: nepodarilo sa alokovať pamäť.\n"); + printf("Ошибка: не удалось выделить память.\n"); // Проверка на ошибки выделения памяти exit(1); } - strcpy(newcar->value, target); - newcar->next = NULL; + strcpy(newcar->value, target); // Копируем значение в новый вагон + newcar->next = NULL; // Устанавливаем следующий элемент как NULL + // Если поезд пустой, возвращаем новый вагон как первый if (first == NULL) { return newcar; } struct car* current = first; + // Проходим по всему поезду до последнего вагона while (current->next != NULL) { current = current->next; } + // Добавляем новый вагон в конец поезда current->next = newcar; return first; } - +// Функция для вывода всех вагонов поезда void print_train(struct car* first) { struct car* current = first; + // Проверка на пустой поезд if (current == NULL) { - printf("Vlak je prázdny.\n"); + printf("Поезд пустой.\n"); return; } + // Выводим значение каждого вагона while (current != NULL) { - printf("%s\n", current->value); + printf("%s\n", current->value); current = current->next; } } - +// Функция для отмены (освобождения) памяти поезда void cancel_train(struct car* first) { if (first == NULL) { - return; + return; // Если поезд пустой, ничего не делаем } + // Рекурсивно освобождаем память cancel_train(first->next); - free(first); + free(first); // Освобождаем текущий вагон } - +// Функция для удаления вагонов с заданным значением struct car* clear_train(struct car* first, const char* target) { struct car* prev = NULL; struct car* current = first; + // Проходим по всем вагонам поезда while (current != NULL) { + // Если значение вагона совпадает с заданным if (strcmp(current->value, target) == 0) { if (prev == NULL) { + // Если это первый вагон struct car* temp = current->next; free(current); current = temp; - first = current; + first = current; // Обновляем первый вагон } else { + // Если это не первый вагон prev->next = current->next; free(current); current = prev->next; } } else { + // Если значение не совпадает, продолжаем prev = current; current = current->next; } } - return first; + return first; // Возвращаем обновленный поезд }