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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2018, 00:32   #1
vorastra
Новичок
Джуниор
 
Регистрация: 10.01.2018
Сообщений: 1
По умолчанию C++ / упорядоченный список /удаление дубликата через уже после занесения

Здравствуйте. Наткнулся на задачу, надо создать упорядоченный список, а затем уже удалить дубликаты. И я застрял на первом задании, не могу создать упорядоченный. Переписывал функцию раз 20, а добавить в упорядоченный всё никак не могу. Помогите, пожалуйста.

Код:
#include <iostream>
#include <conio.h>

using std::cout;
using std::cin;

struct elem
{
	int val;
	elem *next;
};

class list
{
	elem *head;
	public:
		list() 
		{
			head=NULL;
		}
		~list();
		void add(int x);
		void show();
		void delexcess();
};

list::~list()
{
	while(head!=NULL)
	{
		elem *tmp = head->next;
		delete head;
		head = tmp;
	}
}

void list::add(int x)
{
	elem *temp = new elem;
	temp->val = x;
	temp->next = NULL;
	
	if(head==NULL)
		head = temp;
	else
	{
		if(temp->val > head->val)
		{
			elem *head2 = head;
			
			while(x > head2->val && head2->next)
				head2 = head2->next;
						
			temp->next = head2;
			head2 = temp;
//			if(temp2->next==NULL)
//			{
//				temp2->next = temp;
//				temp = temp2;
//			}
//			else
//			{
//				while(temp2->next != NULL && temp->val > temp2->val)
//					temp2 = temp2->next;
//				temp->next = temp2;
//				temp2 = temp;				
//			}
		}
		else
		{
			temp->next = head;
			head = temp;
		}				
	}
}

void list::show()
{
	elem *tmp = head;
	while(tmp!=NULL)
	{
		cout << tmp->val << ' ';
		tmp = tmp->next;
	}
}

void list::delexcess()
{
	elem *tmp = head;
	elem *tmp2 = new elem;
	int count = 0;
	while(tmp->next!=NULL)
	{
		if(tmp->val == tmp->next->val)
			tmp2 = tmp->next;
			delete tmp;
	}
}

int main()
{
	setlocale(LC_ALL, "Rus");
	list element;
	int key, i=1, tmp;
	while(true)
	{
		system("cls");
		cout << "Вводите новые целочисленные элементы.\n";
		
		cout << "Элемент " << i << ": ";
		cin >> tmp;
		if(!cin.good())
		{
			cout << "Ошибка ввода. Нажмите любую клавишу и введите заново.";
			system("pause");
			cin.clear();
			cin.ignore();
			continue;
		}
		i++;
		element.add(tmp);
		cout << "Ввести новый элемент? [Y/N]";
		do
		{
			key = getch();
		} while(key!=89 && key!=78);
		if(key==78)
			break;
	}
	system("cls");
	cout << "Элементы списка до обработки: ";
	element.show();
	cout << "\nЭлементы таблицы выведены. Нажмите любую клавишу для перехода к удалению дубликатов.\n";
	system("pause > nul");
	element.delexcess();
	cout << "Элементы списка после обработки: ";
	element.show();
}
vorastra вне форума Ответить с цитированием
Старый 10.01.2018, 05:04   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Примерно так:
Код:
void list::add(int x)
{
        elem **current = &head;
        while (*current && (*current)->val < x)
        {
                current = &((*current)->next);
        }

	elem *temp = new elem;
	temp->val = x;
	temp->next = *current;
        *current = temp;
}
Black Fregat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двунаправленный упорядоченный по убыванию список desdim Паскаль, Turbo Pascal, PascalABC.NET 1 08.04.2017 11:07
дан упорядоченный список названия книг MDragniil Общие вопросы C/C++ 1 28.12.2016 08:42
Задача на упорядоченный и упорядоченный массив который взят из файла Sweex99 Помощь студентам 6 24.10.2016 18:18
(C++) Упорядоченный список & таблица в двоичном файле annussaa Общие вопросы C/C++ 0 01.05.2015 19:00
Создать общий упорядоченный список, используя имеющуюся частичную сортировку. Roma1305 Паскаль, Turbo Pascal, PascalABC.NET 0 14.11.2012 18:25