diff --git a/du4/main.c b/du4/main.c new file mode 100644 index 0000000..dacf73b --- /dev/null +++ b/du4/main.c @@ -0,0 +1,27 @@ +#include +#include "train.h" + +int main() { + struct car* vlak = NULL; + + vlak = add_car(vlak, "Kosice"); + vlak = add_car(vlak, "Presov"); + vlak = add_car(vlak, "Bratislava"); + vlak = add_car(vlak, "Kosice"); + vlak = add_car(vlak, "Poprad"); + + printf("Povodny vlak:\n"); + print_train(vlak); + + vlak = clear_train(vlak, "Kosice"); + printf("\nPo odstraneni 'Kosice':\n"); + print_train(vlak); + + cancel_train(vlak); + vlak = NULL; + + printf("\nPo zruseni vlaku:\n"); + print_train(vlak); + + return 0; +} diff --git a/du4/output/train.exe b/du4/output/train.exe index 67d8328..4279acd 100644 Binary files a/du4/output/train.exe and b/du4/output/train.exe differ diff --git a/du4/train.c b/du4/train.c index efd5b2b..b12d15c 100644 --- a/du4/train.c +++ b/du4/train.c @@ -49,15 +49,39 @@ void print_train (struct car* first) { void cancel_train (struct car* first) { struct car* current = first; - while (current ! = NULL) { - struct car* next_one = current->next; + while (current !=NULL) { + struct car* next_one = current->next;// запоминаем следующий вагон memset(current->value, 0, SIZE); free(current); - current = next_one;; + 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; +} -int main() { - return 0; -} \ No newline at end of file diff --git a/du4/train.exe b/du4/train.exe new file mode 100644 index 0000000..7b8c3a6 Binary files /dev/null and b/du4/train.exe differ