usaa24/cv4/a_train.c
2024-11-18 14:32:10 +01:00

77 lines
4.0 KiB
C

#include "a_train.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Pridá nový vozeň na koniec vlaku
struct car* add_car(struct car* first, const char* target) {
struct car* new_car = (struct car*)malloc(sizeof(struct car)); // Alokuje pamäť pre nový vozeň
if (new_car == NULL) { // Skontroluje, či sa pamäť podarilo alokovať
printf("Chyba: Nepodarilo sa alokovať pamäť pre nový vozeň.\n");
return first; // Ak nie, vráti pôvodný zoznam
}
strncpy(new_car->value, target, SIZE); // Nastaví cieľovú stanicu vozňa
new_car->next = NULL; // Nový vozeň bude posledný v zozname
if (first == NULL) { // Ak je vlak prázdny
return new_car; // Nový vozeň sa stane prvým
}
struct car* temp = first; // Začne na začiatku vlaku
while (temp->next != NULL) { // Prejde na koniec zoznamu
temp = temp->next;
}
temp->next = new_car; // Pridá nový vozeň na koniec
return first; // Vráti začiatok zoznamu
}
// Vytlačí všetky vozne vo vlaku
void print_train(struct car* first) {
if (first == NULL) { // Ak je vlak prázdny
printf("Vlak je prazdny.\n");
return; // Ukončí funkciu
}
struct car* temp = first; // Začne na začiatku vlaku
while (temp != NULL) { // Prechádza cez všetky vozne
printf("Cielova stanica: %s\n", temp->value); // Vytlačí cieľovú stanicu vozňa
temp = temp->next; // Prejde na ďalší vozeň
}
}
// Zruší všetky vozne vo vlaku
void cancel_train(struct car* first) {
struct car* temp;
while (first != NULL) { // Prechádza cez všetky vozne
temp = first; // Dočasne uloží aktuálny vozeň
first = first->next; // Prejde na ďalší vozeň
free(temp); // Uvoľní pamäť aktuálneho vozňa
}
printf("Vsetky vozne boli zrusene.\n");
}
// Odstráni všetky vozne s danou cieľovou stanicou
struct car* clear_train(struct car* first, const char* target) {
struct car* current = first; // Začne na začiatku vlaku
struct car* previous = NULL; // Uchováva predchádzajúci vozeň
while (current != NULL) { // Prechádza cez všetky vozne
if (strcmp(current->value, target) == 0) { // Ak sa cieľová stanica zhoduje
if (previous == NULL) { // Ak je to prvý vozeň
first = current->next; // Aktualizuje začiatok zoznamu
} else {
previous->next = current->next; // Preskočí aktuálny vozeň
}
struct car* temp = current; // Dočasne uloží aktuálny vozeň
current = current->next; // Prejde na ďalší vozeň
free(temp); // Uvoľní pamäť aktuálneho vozňa
} else {
previous = current; // Aktualizuje predchádzajúci vozeň
current = current->next; // Prejde na ďalší vozeň
}
}
return first; // Vráti začiatok zoznamu
}