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

Работа с двумя списками - C++

Восстановить пароль Регистрация
 
Alex_Reilly
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 26
11.03.2012, 16:49     Работа с двумя списками #1
Суть задания: Два списка А и Б. У одного 5 чисел, у другого пять чисел. У первого:1,2,3,4,5. У второго:3,4,5,6,7. Нужно их вывести на экран. Потом из первого списка удалить числа, которые есть и у второго. Затем добавить к первому списку те числа списка Б, которых нету у А...Я сделал два списка, некоторые функции. Вот мой код. Но я не понимаю как их сравнить и при сравнении удалить элемент (функцию удаления написал), тоже самое по-поводу добавления. Помогите пожалуйтса
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
struct Node
{
int d;
Node *next;
Node *prev;
};
//ОБЬЯВЛЕНИЕ ФУНКЦИЙ
Node *first(int d);
void add(Node **pend, int d);
Node *find(Node * const pbeg, int i);
bool remove(Node **pbeg, Node **pend, int key);
Node *insert(Node * const pbeg, Node **pend, int key, int d);
int main()
{
//СПИСОК А
Node *pbeg_01 = first(1); // Формирование первого элемента списка А
Node *pend_01 = pbeg_01; // Список заканчивается, едва начавшись
//СПИСОК Б
Node *pbeg_02 = first(3); // Формирование первого элемента списка А
Node *pend_02 = pbeg_02; // Список заканчивается, едва начавшись
//СОЗДАНИЕ СПИСКА А
// Добавление в конец списка четырех элементов 2, 3, 4, и 5:
for (int i = 2; i<6; i++)add(&pend_01, i);
Node *pv_01 = pbeg_01;
while (pv_01)
{ // вывод списка на экран
cout << pv_01->d <<" " ;
pv_01 = pv_01->next;
}
cout<<endl;
//СОЗДАНИЕ СПИСКА Б
// Добавление в конец списка четырех элементов 4, 5, 6 , и 7:
for (int i = 4; i<8; i++)add(&pend_02, i);
Node *pv_02 = pbeg_02;
while (pv_02)
{ // вывод списка на экран
cout << pv_02->d <<" " ;
pv_02 = pv_02->next;
}
 
system("pause");
return 0;
}
//ИНИЦИАЛИЗАЦИЯ ФУНКЦИЙ
// Формирование первого элемента
Node *first(int d)
    {
    Node *pv = new Node;
    pv->d = d; pv->next = 0; pv->prev = 0;
    return pv;
    }
// Добавление в конец списка
void add(Node **pend, int d)
    {
    Node *pv = new Node;
    pv->d = d; pv->next = 0; pv->prev = *pend;
    (*pend)->next = pv;
    *pend = pv;
    }
// Поиск элемента по ключу
Node * find(Node * const pbeg, int d)
    {
    Node *pv = pbeg;
    while (pv)
        {
        if(pv->d == d)break; pv = pv->next;
        }
    return pv;
    }
// Удаление элемента
bool remove(Node **pbeg, Node **pend, int key)
    {
    if(Node *pkey = find(*pbeg, key))
        { // 1
        if (pkey == *pbeg)
            { // 2
            *pbeg = (*pbeg)->next; (*pbeg)->prev = 0;
            }
            else if (pkey == *pend)
                { // 3
                *pend = (*pend)->prev; (*pend)->next =0;
                }
                else
                    { //4
                    (pkey->prev)->next = pkey->next;
                    (pkey->next)->prev = pkey->prev;
                    }
                    delete pkey;
                    return true;
        } //5
        return false;
    } //6
// Вставка элемента
Node * insert(Node * const pbeg, Node **pend, int key, int d)
    {
    if(Node *pkey = find(pbeg, key))
        {
        Node *pv = new Node;
        pv->d = d;
// 1 - установление связи нового узла с последующим:
        pv->next = pkey->next;
// 2 - установление связи нового узла с предыдущим:
        pv->prev = pkey;
// 3 - установление связи предыдущего узла с новым:
        pkey->next = pv;
//- Установление связи последующего узла с новым
        if( pkey != *pend) (pv->next)->prev = pv;
// Обновление указателя на конец списка.
// если узел вставляется в конец:
            else *pend = pv;
        return pv;
        }
return 0; 
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 16:49     Работа с двумя списками
Посмотрите здесь:

Работа со списками C++
Работа со списками C++
C++ Работа со списками
Работа со списками. C++
C++ Работа со списками
C++ Работа со списками
Работа со списками C++
Работа со списками C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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