Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2013, 18:27   #1
romka_f
 
Регистрация: 08.04.2013
Сообщений: 5
По умолчанию Объединение двух списков в один без повтора элементов (С++)

нужно дописать функцию, которая делает из двух списков один, в котором все элементы разные, то есть не повторяются. Спасибо!

#include <iostream>
using namespace std;

class Elem
{
public:
int num;
Elem *next;
Elem (int n) { num = n; next = NULL; };
};

class List
{
protected:
Elem *first, *last;
public:
Elem *current;
public:
List () { first = last = current = NULL; };
void add_element (int n);
void delete_element ();
int is_empty () { return (first == NULL); };
void start () { current = first; };
int end () { return (current == NULL); };
void next(){if (!end())current = current -> next;};
void print();
int* merge_lists(int* head1, int* head2);
};

int main()
{
List l;
List l2;
int k;
cout << "Введите элемент 1 списка (0,чтобы закончить):\n";
cin >> k;
while (k!=0)
{
l.add_element (k);
cout << "Введите элемент 1 списка (0,чтобы закончить):\n";
cin >> k;
};

cout << "Введите элемент 2 списка (0,чтобы закончить):\n";
cin >> k;
while (k!=0)
{
l2.add_element (k);
cout << Введите элемент 2 списка (0,чтобы закончить):\n";
cin >> k;
};


cout << "1 список: ";
for (l.start(); !l.end(); l.next())
{
cout << l.current->num << ' ';
}

cout << endl;

cout << "2. список: ";
for (l2.start(); !l2.end(); l2.next())
{
cout << l2.current->num << ' ';
}


return 0;
};


void List::add_element (int n)
{
Elem *p = new Elem (n);
if (first == NULL) first = last = p;
else last = last -> next = p;
current =p;
};

void List:elete_element ()
{
Elem *p = first;
if(!is_empty())
{
if (current == first) current = first-> next;
first = first -> next;
delete p;
if(is_empty())last = NULL;
}
};

void List:rint()
{
for(start(); !end(); next())
cout << current->num << endl;
cout << endl;
}


int* List::merge_lists(int* head1, int* head2)
{
//ЧТО-ТО.....

}
romka_f вне форума Ответить с цитированием
Старый 08.04.2013, 18:46   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Программный код на форуме оформляется тегом CODE.

1) Решение "в лоб": при добавлении каждого нового элемента в новосозданный, возвращаемый в качестве ответа список, проверять, нет ли его уже в этом списке.
Но почему у Вас merge_lists принимает в качестве аргументов два указателя на int и возвращает указатель на int?
Abstraction вне форума Ответить с цитированием
Старый 08.04.2013, 18:59   #3
romka_f
 
Регистрация: 08.04.2013
Сообщений: 5
По умолчанию

0) я просто первый раз тут, буду знать про этот тег

1) прототип функции накидал "от балды". Просто не очень понятно как вообще работает такая функция. Если не сложно, можете, пожалуйста накидать примерно саму функцию. Буду очень благодарен.
romka_f вне форума Ответить с цитированием
Старый 08.04.2013, 21:22   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
прототип функции накидал "от балды". Просто не очень понятно как вообще работает такая функция. Если не сложно, можете, пожалуйста накидать примерно саму функцию.
Могу. Но не хочу.
А вот прототип (и заодно первую и последнюю строчки) - пожалуйста:
Код:
List List::merged_with(const List& other)const{
  List ret;
  /* Здесь списки this и other копируются в ret с удалением дубликатов */
  return ret;
}

//Использование:
List merged = l.merged_with(l2);
//Или сразу, но тогда не забудьте сделать деструктор: сейчас у Вас его нет и это не есть хорошо
l.merged_with(l2).print();
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение двух массивов точек в один. 3dWorld Помощь студентам 0 19.01.2011 14:43
Объединение двух файлов в один kitty19 Общие вопросы C/C++ 4 15.12.2010 15:51
Объединение двух Tchart в один (Delphi) Николай ПН Помощь студентам 5 18.03.2010 22:57
Генерировать массив без повтора значений элементов. На (С.) Raptor Помощь студентам 5 17.12.2007 14:42