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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Shevva
17 / 17 / 0
Регистрация: 13.09.2009
Сообщений: 140
#1

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

05.02.2010, 18:28. Просмотров 593. Ответов 3
Метки нет (Все метки)

Помогите мне решить задачку, я в принципе не понимаю как её решать, вот её условие. Найти объединение двох списков,тоисть получить такой список в котором будут все элементы которые входят хотя бы в один из списков.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2010, 18:28     Найти объединение двух списков
Посмотрите здесь:

Объединение двух списков - C++
Помогите пожалуйста с решением следующей задачи. Нужно добавить функцию для объединения двух списков. #include <iostream> ...

Объединение (конкатенация) двух односвязных списков - C++
Задача: Построить стек (односвязный список). Показать реализацию стека на следующем примере: сцепить два связанных списка данных...

Объединение двух связанных списков (нужен совет) - C++
шаблон ListNode #pragma once // оголошення, щоб зробити другом template< typename NODETYPE > class List; // шаблон класу ...

Объединение двух связных списков с объектами одного типа - C++
Здравствуйте. При изучении связных списков, написал шаблон для связного списка, с функциями добавления и удаления с начала и конца списка....

Объединение двух списков в один без повтора элементов (С++) - C++
нужно дописать функцию, которая делает из двух списков один (новый), в котором все элементы разные, то есть не повторяются. Спасибо! ...

Найти объединение двух множеств - C++
Необходимо найти объединение двух множеств, но программа некорректно выдает ответ.Не могу найти ошибку #include<iostream> ...

Объединение списков - C++
Все работает, но каждый элемент 3-го списка идет через пробел, можно ли убрать эти пробелы? #include <iostream> using namespace std; ...

Объединение списков (list) - C++
Как правильно сделать объединение списков? #include <list> #include <iostream> using namespace std; int main() { list...

АТД список. Объединение списков. - C++
Здравствуйте! Подскажите пожалуйста как объединить два списка в один?? Или второй список добавить в конец первого? Вот так...

Объединение 2х списков <list>, выделение уникальных элементов из них - C++
# include &lt;iostream&gt; # include &lt;string&gt; # include &lt;fstream&gt; # include &lt;list&gt; # include &lt;iterator&gt; # include &lt;algorithm&gt; ...

Как из двух однонаправленных списков создать третий, который состоит из нечетных элементов предыдущих двух? - C++
ребят,подскажите пожалуйста как из двух однонаправленных списка создать третий который состоит из нечетных елементов преведущих двух....

Определить объединение из двух полей. Первое поле - массив из двух байт, второе - слово - C++
Определить объединение из двух полей. Первое поле - массив из двух байт, второе - слово. Ввести x в диапазоне от 1 до 15. Вычислить целое...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shevva
17 / 17 / 0
Регистрация: 13.09.2009
Сообщений: 140
08.02.2010, 21:54  [ТС]     Найти объединение двух списков #2
Может кто идейку кой-какую подкинет?

Добавлено через 2 часа 9 минут
Друзья в среду Экзамен, мне срочно надо!!!!
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.02.2010, 22:03     Найти объединение двух списков #3
создаем новый список.
перебираем все элементы первого, затем второго списка.
для каждого элемента: если такой элемент мы еще не включили в новый список - добавляем его.
Genius Ignat
1235 / 773 / 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     Найти объединение двух списков
Ответ Создать тему
Опции темы

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