Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
inek
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 11
09.04.2012, 23:05     Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них #1
Добрый вечер! Помогите, пожалуйста, начинающей программистке решить следующую задачу:
Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия:
-добавление звена в начало списка;
-удаление звена из начала списка;
-добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан);
-удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан);
-проверка, пуст ли список;
-очистка списка;
-формирование списка;
-печать списка.
Составить программу, которая формирует список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит в другой из них.

Все действия реализовала, а вот как составить метод формирования списка L не могу сообразить. Вот шаблон, разработанный мной:
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
#include <iostream>
 
using namespace std;
 
template <typename T>
class List
{
    struct Node
    {
        T data;
        Node *next;
        Node(T d, Node *n = 0):data(d), next(n) {}
    };
    Node *head;
public:
    List(Node *h = 0):head(h){}
    ~List();
    bool isEmpty();
    void insertAfter(Node *pre, T d);
    void removeAfter(Node *pre);
    void pushFront(T d);
    T popFront();
    void print();
    Node *search(T d);
    void removeDuplicate();
    void create(int k);
};
 
template <typename T>
List<T>::~List()
{
    while (!isEmpty())
       popFront();
}
 
template <typename T>
bool List<T>::isEmpty() 
{
    return !head;
}
 
template <typename T>
void List<T>::insertAfter(Node *pre, T d) 
{ 
    if(!pre) return;
    Node *newNode = new Node(d,0);
    newNode->next = pre->next;
    pre->next = newNode;
}
 
template <typename T>
void List<T>::removeAfter(Node *pre)
{
    if (!pre || !pre->next) return;
    Node *tmp = pre->next; 
    pre->next = pre->next->next;
    delete tmp;
}
 
template <typename T>
void List<T>:: pushFront(T d)
{
    Node *newNode = new Node(d,0);
    if(!head) {
        head = newNode;
        return;
    }
    newNode->next = head;
    head = newNode;
}
 
template <typename T>
T List<T>:: popFront()
{
    T data;                 
    if(!head) return data;
    Node *tmp = head;
    data = head->data;
    if(head->next) {
        head = head->next;
        delete tmp;
        return data;
    }
    delete tmp;
    head = NULL;
    return data;
}
 
template <typename T>
typename List<T>::Node* List<T>::search(T d)
{
    if(!head) return NULL;
    Node* cur = head;
    while(cur) {
        if(cur->data == d) return cur;
        cur = cur->next;
    }
    return NULL;
}
 
 
template <typename T>
void List<T>:: print()
{
    if(!head) return;
    Node *cur  = head;
    while(cur) {
        cout << cur->data << "; ";
        cur = cur->next;
    }
    cout << endl;
}
 
template <typename T>
void List<T>::create(int k)
{
    T d;
    for (int i = 1; i <= k; i++)
    {
        cout << "Enter " << i << "-i element: ";
        cin >> d;
        pushFront(d);
        
    }
}
Работаю в DEV C++ (так требует препод).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 23:05     Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них
Посмотрите здесь:

C++ Напечатать в алфавитном порядке все буквы, которые входят в текст по одному разу
C++ Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой
Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят одновременно в список М1 и М2 C++
C++ Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2 C++
Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2 C++
C++ Написать программу, формирующую список, куда входят по одному разу элементы, присутствующие в обоих списках
Получить числа, которые входят в массив по одному разу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 12:40     Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них #2
Цитата Сообщение от inek Посмотреть сообщение
Все действия реализовала, а вот как составить метод формирования списка L не могу сообразить. Вот шаблон, разработанный мной:


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
List<int> list1, list2;
/*...*/
 
List<int> result;
 
while(!list1.isEmpty())
{
    int data = list1.popFront();
    if(list2.search(data) == NULL && result.search(data) == NULL)
    {
        result.pushFront(data);
    }
}
 
while(!list2.isEmpty())
{
    int data = list2.popFront();
    if(result.search(data) == NULL)
    {
        result.pushFront(data);
    }
}
 
result.print();
inek
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 11
15.04.2012, 19:51  [ТС]     Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них #3
Цитата Сообщение от IPtv Посмотреть сообщение
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
List<int> list1, list2;
/*...*/
 
List<int> result;
 
while(!list1.isEmpty())
{
    int data = list1.popFront();
    if(list2.search(data) == NULL && result.search(data) == NULL)
    {
        result.pushFront(data);
    }
}
 
while(!list2.isEmpty())
{
    int data = list2.popFront();
    if(result.search(data) == NULL)
    {
        result.pushFront(data);
    }
}
 
result.print();
У вас идет реализация для списков типа int. Мне необходимо сделать так сказать универсальным, чтобы была возможность протестировать на разных типах данных: целые, вещественные, символьные, строки.


вот как я объявляю два списка L1 и L2:
C++
1
2
3
4
5
6
7
    List<string> *L1 = new List<string>(NULL);
    L1->create(7);
    L1->print();
    
    List<string> *L2 = new List<string>(NULL);
    L2->create(7);
    L2->print();
и из этих списков надо сформировать L3...
Yandex
Объявления
15.04.2012, 19:51     Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них
Ответ Создать тему
Опции темы

Текущее время: 04:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru