usaa24/cv4/a_train.c
2024-11-19 15:48:04 +01:00

81 lines
1.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "a_train.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
// Добавление вагона в конец списка
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;
if (first == NULL) {
return new_car;
}
struct car* current = first;
while (current->next != NULL) {
current = current->next;
}
current->next = new_car;
return first;
}
// Вывод содержимого поезда
void print_train(struct car* first) {
struct car* current = first;
if (current == NULL) {
printf("The train is empty.\n");
return;
}
printf("Train composition:\n");
while (current != NULL) {
printf("%s\n", current->value);
current = current->next;
}
}
// Удаление всех вагонов, освобождение памяти
void cancel_train(struct car* first) {
struct car* current = first;
while (current != NULL) {
struct car* next = current->next;
free(current);
current = next;
}
}
// Удаление вагонов с заданным направлением
struct car* clear_train(struct car* first, const char* target) {
struct car* current = first;
struct car* prev = NULL;
while (current != NULL) {
if (strcmp(current->value, target) == 0) {
struct car* to_delete = current;
if (prev == NULL) {
first = current->next;
} else {
prev->next = current->next;
}
current = current->next;
free(to_delete);
} else {
prev = current;
current = current->next;
}
}
return first;
}