Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <iostream>
- #include <ctime>
- typedef struct NODE
- {
- int inf;
- NODE* link;
- };
- void createList(NODE*, const size_t size);//Создать список, проинициализировать его нулями
- void initList(NODE*, int min, int max);//Проинициализировать список случайными значениями от min до max
- void inputList(NODE*);//Ввести список с клавиатуры
- void showList(NODE*);//Вывести список на экран
- NODE* proc(NODE*, NODE*);//Функция из 1 задания. Возвращает указатель на список-результат
- int main()
- {
- setlocale(0, "Russian");
- srand(time(NULL));
- NODE* head1 = new NODE;
- NODE* head2 = new NODE;
- size_t size = 0;
- printf("Введите размер списков: ");
- scanf("%d", &size);
- puts("Введите 1-ый список:");
- createList(head1, size);
- inputList(head1);
- puts("1 список:");
- showList(head1);
- puts("Введите 2-ый список:");
- createList(head2, size);
- inputList(head2);
- puts("2 список:");
- showList(head2);
- NODE* head = proc(head1, head2);
- puts("\nРезультат: ");
- showList(head);
- system("pause");
- return 0;
- }
- void createList(NODE* head, const size_t size)
- {
- NODE* tmp = NULL;
- NODE* current = head;
- current->inf = 0;
- current->link = NULL;
- for (int i = 1; i != size; ++i)
- {
- tmp = new NODE;
- tmp->inf = 0;
- tmp->link = NULL;
- current->link = tmp;
- current = tmp;
- }
- }
- void inputList(NODE* head)
- {
- NODE* current = head;
- do
- {
- printf("Введите элемент: ");
- scanf("%d", ¤t->inf);
- current = current->link;
- } while (current);
- }
- void initList(NODE* head, int min, int max)
- {
- NODE* current = head;
- do
- {
- current->inf = rand() % (max - min + 1) + min;
- current = current->link;
- } while (current);
- }
- void showList(NODE* head)
- {
- if (!head)
- {
- puts("Список пуст");
- return;
- }
- NODE* current = head;
- do
- {
- printf("%3d", current->inf);
- current = current->link;
- } while (current);
- puts("");
- }
- NODE* proc(NODE* head1, NODE* head2)
- {
- NODE* result = NULL;
- NODE* current = result;
- NODE* current1 = head1;
- NODE* current2 = head2;
- NODE* tmp;
- bool firstNodeCreated = false;
- //Ищем равные элементы
- do
- {
- //Если элементы равны
- if (current1->inf == current2->inf)
- {
- //Если создан первый узел списка
- if (firstNodeCreated)
- {
- //Создаём новый узел со значением из списка 1
- tmp = new NODE;
- tmp->inf = current1->inf;
- tmp->link = NULL;
- current->link = tmp;
- current = tmp;
- }
- //Если первого узла нет
- else
- {
- //Создаём первый узел
- result = new NODE;
- result->inf = current1->inf;
- result->link = NULL;
- //Перемещаем указатель на этот узел
- current = result;
- firstNodeCreated = true;
- }
- }
- current1 = current1->link;
- current2 = current2->link;
- } while (current1 && current2);
- //Устанавливаем указатели на начало списков 1 и 2
- current1 = head1;
- current2 = head2;
- //Ищем не равные элементы
- do
- {
- //Если элементы не равны
- if (current1->inf != current2->inf)
- {
- //Если создан первый узел списка
- if (firstNodeCreated)
- {
- //Добавляем элемент в начало
- tmp = new NODE;
- tmp->inf = current1->inf;
- tmp->link = result;
- result = tmp;
- //Добавляем элемент в конец
- tmp = new NODE;
- tmp->inf = current2->inf;
- tmp->link = NULL;
- current->link = tmp;
- //Перемещаем указатель на конец списка
- current = current->link;
- }
- //Если первого узла нет
- else
- {
- //Создаём первый узел списка со значением из списка 1
- result = new NODE;
- result->inf = current1->inf;
- result->link = new NODE;
- //Создаём второй узел списка со значением из списка 2
- result->link->inf = current2->inf;
- result->link->link = NULL;
- //Перемещаем указатель на конец списка
- current = result->link;
- firstNodeCreated = true;
- }
- }
- current1 = current1->link;
- current2 = current2->link;
- } while (current1 && current2);
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement