diff --git a/cv4/a_train.c b/cv4/a_train.c index e69de29..210d62c 100644 --- a/cv4/a_train.c +++ b/cv4/a_train.c @@ -0,0 +1,74 @@ +#include "a_train.h" +#include +#include +#include + +// Функция для добавления нового вагона в конец поезда +struct car* add_car(struct car* first, const char* target) { + struct car* new_car = (struct car*)malloc(sizeof(struct car)); + if (!new_car) { + return first; // В случае ошибки выделения памяти, возвращаем исходный поезд + } + + // Копируем название станции + strncpy(new_car->value, target, SIZE); + new_car->value[SIZE - 1] = '\0'; // Защита от переполнения строки + new_car->next = NULL; // Новый вагон всегда идет в конец, поэтому его next = NULL + + if (!first) { + // Если поезд пуст, новый вагон становится первым + return new_car; + } + + // Если поезд уже существует, находим последний вагон + struct car* temp = first; + while (temp->next) { + temp = temp->next; + } + temp->next = new_car; // Присоединяем новый вагон в конец + return first; +} + +// Функция для вывода всех вагонов поезда +void print_train(struct car* first) { + struct car* temp = first; + while (temp) { + printf("Вагон: %s\n", temp->value); + temp = temp->next; + } +} + +// Функция для удаления всех вагонов +void cancel_train(struct car* first) { + struct car* temp = first; + while (temp) { + struct car* next = temp->next; + free(temp); // Освобождаем память для каждого вагона + temp = next; + } +} + +// Функция для удаления вагонов с определенной целевой станцией +struct car* clear_train(struct car* first, const char* target) { + struct car* temp = first; + struct car* prev = NULL; + + // Идем по списку вагонов + while (temp) { + if (strcmp(temp->value, target) == 0) { + // Если название станции совпадает, удаляем вагон + if (prev) { + prev->next = temp->next; + } else { + first = temp->next; // Если удаляем первый вагон + } + struct car* to_delete = temp; + temp = temp->next; + free(to_delete); + } else { + prev = temp; + temp = temp->next; + } + } + return first; // Возвращаем новый указатель на первый вагон +}