#include "a_train.h" #include #include #include // 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 }