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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 22:34   #1
mazzahaker
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 23
По умолчанию Удалить повторы из списка

Добрый вечер! Помогите пожалуйста с программой, в общем необходимо удалить повторяющиеся элементы в односвязном списке, я написал такой код:
Код:
#include "fstream"
#include "iostream"
#include <list>

int qa=0;
template <class T>
struct list
{
	list() : head(nullptr), tail(nullptr) {sz=0;}

	struct node
	{
		T data;
		node * next;
	}; //*curr = {0}, *curr_n = {0};
	struct iterator
	{
		iterator(node* tail)
		{
			ptr = tail;
		}

		node* ptr;

		T getData(void)
		{
			return ptr->data;
		}

		void operator ++ (void)
		{
			ptr = ptr->next;
		}

		bool operator != (node* _n)
		{
			return _n != ptr;
		}
	};

	void add(T _data)
	{
		if (tail == nullptr)
		{
			tail = new node();

			tail->data = _data;
			tail->next = nullptr;
			
			head = tail;
		}
		else
		{
			node* t = new node();
			t->data = _data;
			t->next = nullptr;

			head->next = t;
			head = t;
		}

		sz++;
	}
	iterator getItr()
	{
		return iterator(tail);
	}

	void clear(void)
	{
		node* ptr = nullptr;
		for (auto itr = getItr(); itr != nullptr; itr++)
		{
			if (ptr)
			{
				delete ptr;
			}

			ptr = itr.ptr;
		}
		delete ptr;
		sz = 0;
	}

	node* head, *tail;
	size_t sz;
};

int main()
{
	list<int> l1, l2;
	int t = -1;

	{
		std::ifstream fin("list1.txt", std::ios::in);
		while(fin >> t)
			l1.add(t);
	}

	{
		std::ifstream fin("list2.txt", std::ios::in);
		while(fin >> t)
		{
			qa++;
			l2.add(t);
		}
	}

	std::ofstream fout("out.txt", std::ios::out);
	fout << "list number 1: \n";
	for (auto itr = l1.getItr(); itr != nullptr; )
	{
		fout << itr.getData();
		
		itr++;
		if (itr != nullptr)
			fout << "->";
		else
			fout << "->x";
	}
	
	fout << "\n";
	fout << "\n";
	fout << "list number 2: \n";

	for (auto itr = l2.getItr(); itr != nullptr; )
	{
		fout << itr.getData();
		
		itr++;
		if (itr != nullptr)
			fout << "->";
		else
			fout << "->x";
	}

	fout << "\n";
	list <int> l3(l1);
	l3=l1;
	int qw=0; qw=qa;
	auto itr = l2.getItr();
	for (int i = 0; i < qa; i++)
	{
		l3.add(itr.getData());
		itr++; qw++;
	}
/*	l3.curr = l3.head;
	l3.curr = l3.head->next;
	int num = qw - 1;
	for (int i = 0; i < num; i++)
	{
		if (l3.curr == l3.curr_n)
			l3.curr_n = l3.curr_n->next;
		else fout << l3.curr_n->data;
		if (l3.curr_n->next == NULL)
		{
			num = num - 1 ;
		    i = 0;
		}
	}*/








	fout << "\n";
	fout << "result list: \n";
	for (itr = l3.getItr(); itr != nullptr; )
	{
		fout << itr.getData();
		
		itr++;
		if (itr != nullptr)
			fout << "->";
		else
			fout << "->x";
	}

	l1.clear();
	l2.clear();

	return 0;
}
Не могу удалить повторяющиеся элементы из списка l3, помогите пожалуйста, очень надо... Вы последняя надежда... не получается
mazzahaker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удалить повторы в таблице Радужок Microsoft Office Excel 2 30.04.2011 20:37
Удалить повторы строк Federal Помощь студентам 16 27.02.2011 02:37
удалить повторы FAiver Общие вопросы Delphi 5 21.10.2010 20:45
не могу удалить запись из списка asd-uk Помощь студентам 0 26.04.2010 20:35
Как удалить совпадающие записи из списка? Ivan_RIV Microsoft Office Access 12 12.04.2010 18:55