Обновить cv4/a_train.c
This commit is contained in:
		
							parent
							
								
									e429d20854
								
							
						
					
					
						commit
						b6fba155e8
					
				| @ -0,0 +1,74 @@ | ||||
| #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;  // Возвращаем новый указатель на первый вагон
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user