Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2 - C (СИ)
Формулировка задачи:
Решение задачи: «Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2»
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct list_t { int value; struct list_t* next; } TList; //----------------------------------------------------------------------------- TList* Push(TList** list, int value) { TList* node = (TList*) malloc(sizeof(TList)); node->value = value; node->next = *list; *list = node; return *list; } //----------------------------------------------------------------------------- void Clear(TList** list) { TList* node; while (*list) { node = *list; *list = (*list)->next; free(node); } } //----------------------------------------------------------------------------- TList* Find(TList* list, int value) { for (; list && (list->value != value); list = list->next) { ; } return list; } //----------------------------------------------------------------------------- void Print(TList* list) { for (; list; list = list->next) { printf("%d ", list->value); } printf("\n"); } //----------------------------------------------------------------------------- int Random(int min, int max) { return (rand() % (max - min) + min); } //----------------------------------------------------------------------------- TList* GetGenList(size_t count, int min, int max) { TList* list = NULL; while (count--) { Push(&list, Random(min, max)); } return list; } //----------------------------------------------------------------------------- TList* GetUniqueFirst(TList* first, TList* second) { TList* list = NULL; for (; first; first = first->next) { if (!Find(list, first->value) && !Find(second, first->value)) { Push(&list, first->value); } } return list; } //----------------------------------------------------------------------------- int main() { srand(time(NULL)); TList* l1 = GetGenList(10, 3, 10); TList* l2 = GetGenList(10, 0, 7); TList* l = GetUniqueFirst(l1, l2); printf("L1: "); Print(l1); printf("L2: "); Print(l2); printf("L : "); Print(l); Clear(&l); Clear(&l2); Clear(&l1); system("pause"); return 0; }
Объяснение кода листинга программы
В данном коде используется структура данных TList, представляющая односвязный список. Создаются функции для работы с этим списком: добавление элемента в список (Push), очистка списка (Clear), поиск элемента в списке (Find), вывод списка на экран (Print). Также есть функция генерации случайного числа в заданном диапазоне (Random), функция создания списка из заданного количества случайных чисел в заданном диапазоне (GetGenList) и функция получения уникальных элементов из двух списков (GetUniqueFirst). В функции main создаются два списка l1 и l2, заполняются случайными числами и выводятся на экран. Затем создается список l, в который добавляются уникальные элементы из l1 и l2. После вывода списка l на экран, все списки очищаются и программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д