Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
inek
0 / 0 / 1
Регистрация: 09.04.2012
Сообщений: 11
1

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

09.04.2012, 23:05. Просмотров 2195. Ответов 2
Метки нет (Все метки)

Добрый вечер! Помогите, пожалуйста, начинающей программистке решить следующую задачу:
Разработать шаблон класса для работы с однонаправленным некольцевым списком. Реализовать следующие действия:
-добавление звена в начало списка;
-удаление звена из начала списка;
-добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан);
-удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан);
-проверка, пуст ли список;
-очистка списка;
-формирование списка;
-печать списка.
Составить программу, которая формирует список 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++ (так требует препод).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 23:05
Ответы с готовыми решениями:

Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой
Добрый вечер! Собственно суть задачи такова: Я не совсем поняла списки, вы не могли бы помочь...

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

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

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

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

2
IPtv
8 / 8 / 5
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 12:40 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();
0
inek
0 / 0 / 1
Регистрация: 09.04.2012
Сообщений: 11
15.04.2012, 19:51  [ТС] 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...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 19:51

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

Сформировать третий список, включив в него по одному разу элементы из первого, не входящие во второй
Здравствуйте! Начал разбор темы ссылочных типов данных. Интересно, как всегда, но сразу столкнулся...

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


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

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

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