From b6fba155e881086ae729347361c2eb23b42ff992 Mon Sep 17 00:00:00 2001 From: Yevhen Kozirovskyi Date: Fri, 25 Oct 2024 01:53:09 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20cv4/a=5Ftrain.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cv4/a_train.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) 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; // Возвращаем новый указатель на первый вагон +}