75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "a_train.h"
 | ||
| #include <stdio.h>
 | ||
| #include <stdlib.h>
 | ||
| #include <string.h>
 | ||
| 
 | ||
| // Функция для добавления нового вагона в конец поезда
 | ||
| struct car* add_car(struct car* first, const char* target) {
 | ||
|     struct car* new_car = (struct car*)malloc(sizeof(struct car));
 | ||
|     if (!new_car) {
 | ||
|         return first; // В случае ошибки выделения памяти, возвращаем исходный поезд
 | ||
|     }
 | ||
|     
 | ||
|     // Копируем название станции
 | ||
|     strncpy(new_car->value, target, SIZE);
 | ||
|     new_car->value[SIZE - 1] = '\0';  // Защита от переполнения строки
 | ||
|     new_car->next = NULL;  // Новый вагон всегда идет в конец, поэтому его next = NULL
 | ||
| 
 | ||
|     if (!first) {
 | ||
|         // Если поезд пуст, новый вагон становится первым
 | ||
|         return new_car;
 | ||
|     }
 | ||
| 
 | ||
|     // Если поезд уже существует, находим последний вагон
 | ||
|     struct car* temp = first;
 | ||
|     while (temp->next) {
 | ||
|         temp = temp->next;
 | ||
|     }
 | ||
|     temp->next = new_car;  // Присоединяем новый вагон в конец
 | ||
|     return first;
 | ||
| }
 | ||
| 
 | ||
| // Функция для вывода всех вагонов поезда
 | ||
| void print_train(struct car* first) {
 | ||
|     struct car* temp = first;
 | ||
|     while (temp) {
 | ||
|         printf("Вагон: %s\n", temp->value);
 | ||
|         temp = temp->next;
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| // Функция для удаления всех вагонов
 | ||
| void cancel_train(struct car* first) {
 | ||
|     struct car* temp = first;
 | ||
|     while (temp) {
 | ||
|         struct car* next = temp->next;
 | ||
|         free(temp);  // Освобождаем память для каждого вагона
 | ||
|         temp = next;
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| // Функция для удаления вагонов с определенной целевой станцией
 | ||
| struct car* clear_train(struct car* first, const char* target) {
 | ||
|     struct car* temp = first;
 | ||
|     struct car* prev = NULL;
 | ||
| 
 | ||
|     // Идем по списку вагонов
 | ||
|     while (temp) {
 | ||
|         if (strcmp(temp->value, target) == 0) {
 | ||
|             // Если название станции совпадает, удаляем вагон
 | ||
|             if (prev) {
 | ||
|                 prev->next = temp->next;
 | ||
|             } else {
 | ||
|                 first = temp->next;  // Если удаляем первый вагон
 | ||
|             }
 | ||
|             struct car* to_delete = temp;
 | ||
|             temp = temp->next;
 | ||
|             free(to_delete);
 | ||
|         } else {
 | ||
|             prev = temp;
 | ||
|             temp = temp->next;
 | ||
|         }
 | ||
|     }
 | ||
|     return first;  // Возвращаем новый указатель на первый вагон
 | ||
| }
 |