#include "a_train.h" #include #include #include // Функция для добавления нового вагона в поезд struct car* add_car(struct car* first, const char* target) { struct car* newcar = (struct car*)calloc(1, sizeof(struct car)); // Выделение памяти для нового вагона if (newcar == NULL) { printf("Ошибка: не удалось выделить память.\n"); // Проверка на ошибки выделения памяти exit(1); } 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("Поезд пустой.\n"); return; } // Выводим значение каждого вагона while (current != NULL) { printf("%s\n", current->value); current = current->next; } } // Функция для отмены (освобождения) памяти поезда void cancel_train(struct car* first) { if (first == NULL) { return; // Если поезд пустой, ничего не делаем } // Рекурсивно освобождаем память cancel_train(first->next); 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; // Обновляем первый вагон } else { // Если это не первый вагон prev->next = current->next; free(current); current = prev->next; } } else { // Если значение не совпадает, продолжаем prev = current; current = current->next; } } return first; // Возвращаем обновленный поезд }