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