usaa25/du4/a_train.c
2025-11-04 18:59:53 +01:00

88 lines
2.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "train.h"
struct car* add_car (struct car* first, const char* target) {
struct car* novyj_vagon = (struct car*) malloc(sizeof(struct car)); // создаём новый вагон
if (novyj_vagon == NULL) {
printf("Chyba: nepodarilo sa vytvorit novy vozen!\n");
return first;
}
strncpy(novyj_vagon->value, target, SIZE - 1);
novyj_vagon->value[SIZE - 1] = '\0';
novyj_vagon->next = NULL;
if (first == NULL) {
return novyj_vagon;
}
struct car* actual = first;
while (actual->next != NULL) {
actual = actual->next;
}
actual->next = novyj_vagon;
return first;
}
void print_train (struct car* first) {
if (first == NULL) {
printf("vlak je prazdny!\n");
return;
}
struct car* actual = first;
int schet = 1;
while (actual != NULL) {
printf("%d. [%s]", schet, actual->value);
if (actual->next != NULL) {
printf(" -> ");
}
actual = actual->next;
schet++;
}
printf("\n");
}
void cancel_train (struct car* first) {
struct car* current = first;
while (current !=NULL) {
struct car* next_one = current->next;// запоминаем следующий вагон
memset(current->value, 0, SIZE);
free(current);
current = next_one;; // переходим к следующему вагону
}
}
struct car* clear_train(struct car* first, const char* target) {
if (first == NULL) {
return NULL;
}
struct car* current = first; // текущий вагон
struct car* previous = NULL; // предыдущий вагон
while (current !=NULL) {
if (strcmp(current->value, target)==0) {
if (previous==NULL) {
struct car* new_start = current->next; //Сохраняем адрес второго вагона
free(current);
current = new_start; //Двигаем курсор на следующий вагон
first = new_start; //Обновляем начало поезда
continue;
}
} else {
previous->next = current->next;
free(current);
current = previous->next;
continue;
}
}
previous = current;
current = current->next;
}