Создать список, элементы которого являются числа, которые входят в первый список и не входят в другой - C (СИ)
Формулировка задачи:
Даны два списка целых чисел. Создать список, элементы которого являются числа, которые входят в первый список и не входят в другой.
Решение задачи: «Создать список, элементы которого являются числа, которые входят в первый список и не входят в другой»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> // Описание узла списка typedef struct node_t { int value; // Значение хранимое узлом struct node_t* next; // Указатель на следующий узел } TList; //----------------------------------------------------------------------------- // Функция добавления нового значения в вершину списка TList* PushFront(TList** list, int value) { // Создаём новый узел и присваиваем ему значение TList* node = malloc(sizeof(TList)); node->value = value; // Т.к. добавление происходит в вершину списка, // то новый узел должен указывать на имеющийся node->next = *list; // Вершиной списка теперь является новый узел *list = node; return *list; } //----------------------------------------------------------------------------- // Функция генерирования случайного числа в диапазоне int Random(int min, int max) { return rand() % (max - min + 1) + min; } //----------------------------------------------------------------------------- // Функция генерирует список на заданное количество // элементов в заданном диапазоне TList* GetRandomList(size_t count, int min, int max) { TList* list = NULL; // Заданное количество раз выполняем добавление в список // случайны чисел из диапазона while (count--) { PushFront(&list, Random(min, max)); } return list; } //----------------------------------------------------------------------------- // Функция выполняет разность двух списков, т.е. формирует новый // из элементов входящих в первый но не входящий во второй TList* GetDifferenceList(const TList* first, const TList* second) { TList* result = NULL; const TList* tmp; // Пробегаемся по первому списку for (; first; first = first->next) { // Ищем во втором списке одинаковый элемент for (tmp = second; tmp && first->value != tmp->value; tmp = tmp->next) { ; } // Если элемент во втором списке не был найден, то добавляем // его в результирующий список if (tmp == NULL) { PushFront(&result, first->value); } } return result; } //----------------------------------------------------------------------------- void PrintList(const TList* list) { // Перебираем все элементы списка и выводим их на экран for (; list; list = list->next) { printf("%d, ", list->value); } printf("\b\b \n"); } //----------------------------------------------------------------------------- int main() { srand(time(NULL)); TList* first = GetRandomList(5, 1, 10); TList* second = GetRandomList(5, 5, 15); printf("first: "); PrintList(first); printf("second: "); PrintList(second); TList* result = GetDifferenceList(first, second); printf("result: "); PrintList(result); return 0; }
Объяснение кода листинга программы
Код представляет собой набор функций и переменных для работы со связанным списком (Linked List) в языке C.
- Типизация:
- В данном коде используются следующие типы данных:
int
- для хранения целочисленных значений в узлах списка.TList
- для описания структуры узла списка.size_t
- для представления размера списков, используется в функцииGetRandomList
иGetDifferenceList
.const
- используется для обозначения константных переменных и указателей, которые не должны быть изменены.
- В данном коде используются следующие типы данных:
- Вершина списка:
- Вершина списка представляется указателем
*list
.
- Вершина списка представляется указателем
- Функции работы со списком:
- Функция
PushFront
добавляет новый узел со значением в вершину списка. - Функция
GetRandomList
генерирует список заданного размера в заданном диапазоне. - Функция
GetDifferenceList
выполняет разность двух списков, т.е. формирует новый список из элементов входящих в первый, но не входящих во второй. - Функция
PrintList
перебирает все элементы списка и выводит их на экран.
- Функция
- Главная функция:
- В функции
main
создаются два спискаfirst
иsecond
с помощью функцииGetRandomList
. - Затем списки выводятся на экран с помощью функции
PrintList
. - После этого выполняется операция разности списков
first
иsecond
и результат выводится на экран с помощью функцииPrintList
.
- В функции
- Использование:
- Данный код может быть использован для решения задачи по созданию списка, элементы которого являются числами, которые входят в первый список и не входят во второй.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д