Update cv4/a_train.c
This commit is contained in:
		
							parent
							
								
									20600f7434
								
							
						
					
					
						commit
						4f512191c7
					
				| @ -3,77 +3,88 @@ | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| 
 | ||||
| // Функция для добавления нового вагона в поезд
 | ||||
| struct car* add_car(struct car* first, const char* target) { | ||||
|     struct car* newcar = (struct car*)calloc(1, sizeof(struct car));  | ||||
|     struct car* newcar = (struct car*)calloc(1, sizeof(struct car)); // Выделение памяти для нового вагона
 | ||||
|     if (newcar == NULL) { | ||||
|         printf("Chyba: nepodarilo sa alokovať pamäť.\n"); | ||||
|         printf("Ошибка: не удалось выделить память.\n"); // Проверка на ошибки выделения памяти
 | ||||
|         exit(1); | ||||
|     } | ||||
| 
 | ||||
|     strcpy(newcar->value, target);  | ||||
|     newcar->next = NULL;  | ||||
|     strcpy(newcar->value, target); // Копируем значение в новый вагон
 | ||||
|     newcar->next = NULL; // Устанавливаем следующий элемент как NULL
 | ||||
| 
 | ||||
|     // Если поезд пустой, возвращаем новый вагон как первый
 | ||||
|     if (first == NULL) { | ||||
|         return newcar; | ||||
|     } | ||||
| 
 | ||||
|     struct car* current = first; | ||||
|     // Проходим по всему поезду до последнего вагона
 | ||||
|     while (current->next != NULL) { | ||||
|         current = current->next; | ||||
|     } | ||||
| 
 | ||||
|     // Добавляем новый вагон в конец поезда
 | ||||
|     current->next = newcar; | ||||
|     return first; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Функция для вывода всех вагонов поезда
 | ||||
| void print_train(struct car* first) { | ||||
|     struct car* current = first; | ||||
| 
 | ||||
|     // Проверка на пустой поезд
 | ||||
|     if (current == NULL) { | ||||
|         printf("Vlak je prázdny.\n"); | ||||
|         printf("Поезд пустой.\n"); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     // Выводим значение каждого вагона
 | ||||
|     while (current != NULL) { | ||||
|         printf("%s\n", current->value);  | ||||
|         printf("%s\n", current->value); | ||||
|         current = current->next; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Функция для отмены (освобождения) памяти поезда
 | ||||
| void cancel_train(struct car* first) { | ||||
|     if (first == NULL) { | ||||
|         return; | ||||
|         return; // Если поезд пустой, ничего не делаем
 | ||||
|     } | ||||
| 
 | ||||
|     // Рекурсивно освобождаем память
 | ||||
|     cancel_train(first->next); | ||||
|     free(first); | ||||
|     free(first); // Освобождаем текущий вагон
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Функция для удаления вагонов с заданным значением
 | ||||
| struct car* clear_train(struct car* first, const char* target) { | ||||
|     struct car* prev = NULL; | ||||
|     struct car* current = first; | ||||
| 
 | ||||
|     // Проходим по всем вагонам поезда
 | ||||
|     while (current != NULL) { | ||||
|         // Если значение вагона совпадает с заданным
 | ||||
|         if (strcmp(current->value, target) == 0) { | ||||
|             if (prev == NULL) { | ||||
|                 // Если это первый вагон
 | ||||
|                 struct car* temp = current->next; | ||||
|                 free(current); | ||||
|                 current = temp; | ||||
|                 first = current; | ||||
|                 first = current; // Обновляем первый вагон
 | ||||
|             } else { | ||||
|                 // Если это не первый вагон
 | ||||
|                 prev->next = current->next; | ||||
|                 free(current); | ||||
|                 current = prev->next; | ||||
|             } | ||||
|         } else { | ||||
|             // Если значение не совпадает, продолжаем
 | ||||
|             prev = current; | ||||
|             current = current->next; | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     return first; | ||||
|     return first; // Возвращаем обновленный поезд
 | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user