Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 21.12.2019
Сообщений: 7
1

Создать список L3 из элементов, которые входят в список L1 и не входят в список L2

29.02.2020, 11:46. Просмотров 1129. Ответов 3
Метки нет (Все метки)

Нужно создать список L3 из элементов, которые входят в список L1 и не входят в список L2, вернуть длину нового списка.

Есть код, не понимаю, как реализовать задание

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 #include <iostream>
#include<conio.h>
using namespace std;
 
struct A
{
 
    int key;
 
};
 
struct B
{
    int key;
};
struct C
{
    int key;
};
 
 
struct ListA
{
    A a;
    ListA* next;
 
};
 
struct ListB
{
    B b;
    ListB* next;
 
};
 
struct ListC
{
    C c;
    ListC* next;
 
};
 
 
 
void Print(ListC* b)
{
    ListC* print = b;
 
    while (print)
    {
        cout << "[" << print << "] = " << print->c.key << endl;
        print = print->next;
    }
    cout << "NULL" << endl << endl;
}
 
void Init(ListA** begin)
{
    *begin = new ListA;
    A a[5] = { -3443,3452,-56783,784,5 };
 
    (*begin)->a.key = 20;
 
    ListA* end = (*begin);
    for (int i = 0; i < 5; i++)
    {
        end->next = new ListA;
        end = end->next;
        end->a = a[i];
        end->next = NULL;
    }
}
 
 
void Init(ListB** begin)
{
    *begin = new ListB;
    B b[5] = { -3443,3452,-56783,784,5 };
 
    (*begin)->b.key = 20;
 
    ListB* end = (*begin);
    for (int i = 0; i < 5; i++)
    {
        end->next = new ListB;
        end = end->next;
        end->b = b[i];
        end->next = NULL;
    }
}
 
/*
List* Change(List* b)
{
    List* last = NULL;
 
    while (b)
    {
        if (b->a.key < 0)
        {
            b->a.key *= -1;
            last = b;
        }
        b = b->next;
    }
    return last;
}
*/
int main()
{
    setlocale(LC_ALL, "Russian");
 
    ListA* begin = NULL;
    ListB* begin = NULL;
 
 
    Init(&begin);
    Print(begin);
    /*cout << "Адрес последнего изменения = " << Change(begin) << endl << endl;
    Print(begin); */ 
    _getch();
    return 0;
}
Добавлено через 2 часа 53 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
#include <iostream>
using namespace std;
 
struct ListA
{
    int value;
    ListA* next;
    ListA(int val = 0, ListA* p = NULL) //конструктор
    {
        value = val;
        next = p;
    }
};
 
struct ListB
{
    int value;
    ListB* next;
    ListB(int val = 0, ListB* p = NULL)
    {
        value = val;
        next = p;
    }
};
 
struct ListC
{
    int value;
    ListC* next;
    ListC(int val = 0, ListC* p = NULL)
    {
        value = val;
        next = p;
    }
};
 
ListA* Add_last(int n, ListA* head1)
{
    ListA* q = new ListA(n), * p = head1;
 
    if (head1 == NULL) return q; // если список пуст
    while (p->next != NULL) // «идем в конец списка»
        p = p->next;
    p->next = q;
    return head1;
}
 
ListB* Add_last(int n, ListB* head2)
{
    ListB* q = new ListB(n), * p = head2;
 
    if (head2 == NULL) return q;
    while (p->next != NULL)
        p = p->next;
    p->next = q;
    return head2;
}
 
ListC* Add_last(int n, ListC* head3)
{
    ListC* q = new ListC(n), * p = head3;
 
    if (head3 == NULL) return q;
    while (p->next != NULL)
        p = p->next;
    p->next = q;
    return head3;
}
 
ListA* Creat_list1(const int& N)
{
    cout << "Введите элементы списка L1" << endl;
    int elm;
    ListA* head1 = NULL;
    for (int i = 0; i < N; i++)
    {
        cin >> elm;
        head1 = Add_last(elm, head1);
    }
    return head1;
}
 
ListB* Creat_list2(const int& N)
{
    cout << "Введите элементы списка L2" << endl;
    int elm;
    ListB* head2 = NULL;
    for (int i = 0; i < N; i++)
    {
        cin >> elm;
        head2 = Add_last(elm, head2);
    }
    return head2;
}
 
//ListC* Creat_list3(const int& N)
//{
   
//}
 
void Print_list(ListA* head1)
{
    cout << "Вывод L1: " << endl;
    ListA* p = head1;
    if (p == NULL) puts("Список пустой");
    else
        while (p != NULL)
        {
            cout << p->value;
            p = p->next;
        }
}
 
void Print_list(ListB* head2)
{
    cout << "Вывод L2: " << endl;
    ListB* p = head2;
    if (p == NULL) puts("Список пустой");
    else
        while (p != NULL)
        {
            cout << p->value;
            p = p->next;
        }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int N;
    ListA* head1 = NULL;
    cout << "Введите число элементов L1: ";
    cin >> N;
    head1 = Creat_list1(N);
 
    ListB* head2 = NULL;
    cout << "Введите число элементов L2: ";
    cin >> N;
    head2 = Creat_list2(N);
    Print_list(head1);
    cout << endl;
    Print_list(head2);
}
Сделал три списка, в первые два вбиваются элементы. Как теперь сделать проверку элементов по заданию в третьем списке?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.02.2020, 11:46
Ответы с готовыми решениями:

Создать список L3 из элементов, которые входят в список L1 и не входят в список L2
Задание : Создать список L3 из элементов, которые входят в список L1 и не входят в список L2,...

Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2
Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые ...

Создать список, элементы которого являются числа, которые входят в первый список и не входят в другой
Даны два списка целых чисел. Создать список, элементы которого являются числа, которые входят в...

Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список L2
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые...

3
95 / 78 / 74
Регистрация: 11.05.2015
Сообщений: 189
29.02.2020, 12:09 2
Лучший ответ Сообщение было отмечено whyblok как решение

Решение

Не очень ясно зачем создавать несколько реализаций линейных списков, если можно ограничиться одной:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct List
{
    int value;
    List* next;
    List(int val = 0, List* p = NULL)
    {
        value = val;
        next = p;
    }
};
// ...
List * listA = Create_list(N);
List * listB = Create_list(N);
После этого можно пробежаться по всем элементам списка A и проверить содержатся ли они в B:
C++
1
2
3
4
5
6
7
List * node = listA;
while (node)
{
    if (ListHasValue(listB, node->value) == false)
        Add_last(node->value, listC);
    node = node->next;
}
где функция ListHasValue имеет примерно следующую реализацию:
C++
1
2
3
4
5
6
7
8
List * node = list;
while (node)
{
    if (node->value == value);
        return true;
    node = node->next;
}
return false;
1
3312 / 2691 / 727
Регистрация: 25.03.2012
Сообщений: 9,720
Записей в блоге: 1
29.02.2020, 13:08 3
Цитата Сообщение от whyblok Посмотреть сообщение
struct A
struct B
struct C
{
зачем повторять по три раза? Ты вообще понимаешь, что такое struct или два года изучения Си ушли вникуда?

Добавлено через 39 секунд
удаляй struct b и struct c
0
Модератор
Эксперт С++
10254 / 8573 / 5197
Регистрация: 18.12.2011
Сообщений: 22,938
29.02.2020, 15:50 4
Создать список из элементов первого списка, которые не входят в другой список
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.02.2020, 15:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать список из элементов первого списка, которые не входят в другой список
создать список L ,который включает в себя по одному разу елементы,которые входят в список L1 и не...

Сформировать список Р, включив в него элементы списка Р1, которые не входят в список Р2
Как написать функцию или процедуру, которая формирует список Р, включив в него по одному разу...

Включить в список по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входят в другой
Составить программу,которая формирует список L,включив в него по одному разу элементы,которые...

Сформировать список L, включая в него элементы, которые входят в один из списков L1 или L2, но не входят в другой.
Описать функцию, которая формирует список L, включая в него элементы, которые входят в один из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.