usaa24/cv4/a_train.c

77 lines
4.0 KiB
C
Raw Permalink Normal View History

2024-10-24 16:53:07 +00:00
#include "a_train.h"
#include <stdio.h>
2024-10-24 17:05:08 +00:00
#include <stdlib.h>
#include <string.h>
2024-10-24 16:53:07 +00:00
2024-11-18 13:32:10 +00:00
// Pridá nový vozeň na koniec vlaku
2024-10-24 17:05:08 +00:00
struct car* add_car(struct car* first, const char* target) {
2024-11-18 13:32:10 +00:00
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ť
2024-10-24 17:05:08 +00:00
printf("Chyba: Nepodarilo sa alokovať pamäť pre nový vozeň.\n");
2024-11-18 13:32:10 +00:00
return first; // Ak nie, vráti pôvodný zoznam
2024-10-24 17:05:08 +00:00
}
2024-11-18 13:32:10 +00:00
strncpy(new_car->value, target, SIZE); // Nastaví cieľovú stanicu vozňa
new_car->next = NULL; // Nový vozeň bude posledný v zozname
2024-10-24 17:14:24 +00:00
2024-11-18 13:32:10 +00:00
if (first == NULL) { // Ak je vlak prázdny
return new_car; // Nový vozeň sa stane prvým
2024-10-24 17:05:08 +00:00
}
2024-10-24 17:14:24 +00:00
2024-11-18 13:32:10 +00:00
struct car* temp = first; // Začne na začiatku vlaku
while (temp->next != NULL) { // Prejde na koniec zoznamu
2024-10-24 17:05:08 +00:00
temp = temp->next;
}
2024-11-18 13:32:10 +00:00
temp->next = new_car; // Pridá nový vozeň na koniec
2024-10-24 17:14:24 +00:00
2024-11-18 13:32:10 +00:00
return first; // Vráti začiatok zoznamu
2024-10-24 16:53:07 +00:00
}
2024-11-18 13:32:10 +00:00
// Vytlačí všetky vozne vo vlaku
2024-10-24 16:53:07 +00:00
void print_train(struct car* first) {
2024-11-18 13:32:10 +00:00
if (first == NULL) { // Ak je vlak prázdny
2024-10-24 17:10:30 +00:00
printf("Vlak je prazdny.\n");
2024-11-18 13:32:10 +00:00
return; // Ukončí funkciu
2024-10-24 17:10:30 +00:00
}
2024-11-18 13:32:10 +00:00
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ň
2024-10-24 17:10:30 +00:00
}
2024-10-24 16:53:07 +00:00
}
2024-11-18 13:32:10 +00:00
// Zruší všetky vozne vo vlaku
2024-10-24 16:53:07 +00:00
void cancel_train(struct car* first) {
2024-10-24 17:26:06 +00:00
struct car* temp;
2024-11-18 13:32:10 +00:00
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
2024-10-24 17:26:06 +00:00
}
printf("Vsetky vozne boli zrusene.\n");
2024-10-24 16:53:07 +00:00
}
2024-11-18 13:32:10 +00:00
// Odstráni všetky vozne s danou cieľovou stanicou
2024-10-24 16:53:07 +00:00
struct car* clear_train(struct car* first, const char* target) {
2024-11-18 13:32:10 +00:00
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
2024-10-24 17:26:06 +00:00
} else {
2024-11-18 13:32:10 +00:00
previous->next = current->next; // Preskočí aktuálny vozeň
2024-10-24 17:26:06 +00:00
}
2024-11-18 13:32:10 +00:00
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
2024-10-24 17:26:06 +00:00
} else {
2024-11-18 13:32:10 +00:00
previous = current; // Aktualizuje predchádzajúci vozeň
current = current->next; // Prejde na ďalší vozeň
2024-10-24 17:26:06 +00:00
}
}
2024-11-18 13:32:10 +00:00
return first; // Vráti začiatok zoznamu
2024-10-24 16:53:07 +00:00
}