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

Найти объединение двух списков - C++

Восстановить пароль Регистрация
 
Shevva
 Аватар для Shevva
17 / 17 / 0
Регистрация: 13.09.2009
Сообщений: 140
05.02.2010, 18:28     Найти объединение двух списков #1
Помогите мне решить задачку, я в принципе не понимаю как её решать, вот её условие. Найти объединение двох списков,тоисть получить такой список в котором будут все элементы которые входят хотя бы в один из списков.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shevva
 Аватар для Shevva
17 / 17 / 0
Регистрация: 13.09.2009
Сообщений: 140
08.02.2010, 21:54  [ТС]     Найти объединение двух списков #2
Может кто идейку кой-какую подкинет?

Добавлено через 2 часа 9 минут
Друзья в среду Экзамен, мне срочно надо!!!!
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.02.2010, 22:03     Найти объединение двух списков #3
создаем новый список.
перебираем все элементы первого, затем второго списка.
для каждого элемента: если такой элемент мы еще не включили в новый список - добавляем его.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
08.02.2010, 22:40     Найти объединение двух списков #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
145
146
147
148
#include <stdio.h>
#include <stdlib.h>
 
//Возвращаемы значения
//----------------------------------------------------------
//Для функции: long Create(Node **pbeg, Node **pend, DATA d)
#define OK_CREATE 0x000       //список создан
#define LIST_IS   0x100       //список уже существует, его повторное создание невозможно
 
//Для функции: long add(Node  **pend, DATA d)
#define OK_ADD       0x300          //добавили в конец списка
#define LIST_IS_NOT  0x003          //список пуст создайте его заново
//---------------------------------------------------------------------------
 
typedef int DATA;
//описываем узел
struct Node {
DATA dan;
Node *prev;
Node *next;
};
 
//Основыне функции по работе со списком----------------------------------------------------------------------------------------
long Create (Node **pbeg, Node **pend, DATA d);              //создание списка
long add    (Node  **pbeg, Node **pend ,DATA d);             //добавление в конец
DATA DelB   (Node **pbeg);                                   //выборка из начала
void Print(Node *pbeg);                                      //показ списка сначала
 
//-----------------------------------------------------------------------------------------------------------------------------
 
void main(){
//Создаём первый список
Node *pbeg1 = NULL;
Node *pend1 = NULL;
Create(&pbeg1,&pend1,1);
int mas1[5]={2,3,4,5,6};
int i;
for(i=0;i<5;i++)add(&pbeg1,&pend1,mas1[i]);
Print(pbeg1);
//---------------------------------------------
//Создаём второй список
Node *pbeg2 = NULL;
Node *pend2 = NULL;
Create(&pbeg2,&pend2,7);
int mas2[5]={8,9,10,11,12};
for(i=0;i<5;i++)add(&pbeg2,&pend2,mas2[i]);
Print(pbeg2);
//---------------------------------------------
 
Node *tpbeg1 = pbeg1;   //что бы указатель на начало не изменялся
Node *tpbeg2 = pbeg2;   //что бы указатель на начало не изменялся
//Формируем объединённый список----------------------------------
Node *pbeg3 = NULL;
Node *pend3 = NULL;
 
Create(&pbeg3,&pend3,tpbeg1->dan);
tpbeg1=tpbeg1->next;   //продвигаем на второй
 
//Формируем новый иp первого
while(tpbeg1)
{
    add(&pbeg3,&pend3,tpbeg1->dan);
    tpbeg1=tpbeg1->next; 
}
 
//Формируем новый из второго
while(tpbeg2)
{
    add(&pbeg3,&pend3,tpbeg2->dan);
    tpbeg2=tpbeg2->next; 
}
 
Print(pbeg3);  //показываем сформированный список
 
//Отчищаем память из-под списков
DelB(&pbeg1);
DelB(&pbeg2);
DelB(&pbeg3);
 
return;
}
 
//-----------------------------------------------------------------------------------------------------------------------------
 
 
 
//создание списка-----------------------------
long Create (Node **pbeg, Node **pend, DATA d){
//Безопасное создание списка, если список пуст создаём его
if((*pbeg)==NULL||(*pend)==NULL) {
 
Node *pv = new Node;  //создаём узел
pv->dan = d;          //присваиваем основным данным узла, значения
pv->next = NULL;      //следующего  узла нет
pv->prev = NULL;      //предыдущего узла нет
(*pbeg)=pv;           //это узел начальный
(*pend)=(*pbeg);      //начало-конец списка
return OK_CREATE;     //создали список
}
//иначе
else return LIST_IS;  //список существет создавать его не надо
 
 
}
 
//добавление в конец очереди
long add(Node  **pbeg, Node **pend, DATA d){
if((*pbeg)==NULL||(*pend)==NULL)return LIST_IS_NOT;
Node *pv = new Node;  //создаём узел
pv->dan = d;          //присваиваем основным данным узла, значения
pv->next = NULL;      //следующего  узла ещё нет
pv->prev =(*pend);    //связываемя с последним
(*pend)->next = pv;   //последний связывается с новым
(*pend)=pv;           //новый становится последним.
return  OK_ADD ;
 
 
}
 
//выборка из начала----------------------
DATA DelB(Node **pbeg){
Node *tmp = *pbeg;   
DATA var(0);
//Если в списке что- что есть
if(tmp){
var=tmp->dan;
(*pbeg)=(*pbeg)->next;
delete tmp;
return var;
}
return var;
}
 
 
//показать список на экран--------------------
void Print(Node *pbeg){
    
    while(pbeg){
        printf("%d",pbeg->dan);
        printf("\n");
        pbeg=pbeg->next;
    }
printf("\n");
 
 
 
return ;
}
Yandex
Объявления
08.02.2010, 22:40     Найти объединение двух списков
Ответ Создать тему
Опции темы

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