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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2015, 16:20   #1
FunkyDanky
Новичок
Джуниор
 
Регистрация: 24.12.2015
Сообщений: 1
Сообщение Дан список из n целых чисел a1, a2,...,an

Всем доброго времени суток, у меня тут такая ситуация, что не могу найти где у меня ошибка, помогите пожалуйста кто с чем сможет. void printlist(list* head, list* tail) эта процедура не работает, по крайней мере компилятору это не нравится. Заранее, очень благодарен.
Дан список из n целых чисел a1, a2,...,an.
1) Вывести на экран элементы списка в указанной последовательности: an, an-1,...,a1.
2) Удалить из списка все элементы, входящие в него в точности 2 раза.
Желательно вывести список до и списки после, это тут получается 2 задачи в одной.
В решениях задач этого раздела необходимо использовать динамические структуры данных - линейные одно- или двусвязные списки(последовательности значений). Следует заметить, что реорганизация списка(включение, исключение, перестановка элементов) должна осуществляться изменением ссылочных, а не информационных полей элементов списка. Кроме того считается, что перед выполнением любой операции со списком его длина(количество элементов) явно не задана.

(Версия Visual Studio 2013)
Код:
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <locale.h>
#include <map>


using namespace std;

struct list
{
	int info;
	list *pred, *next;
};

/*Определяем прототипы будущих функций*/
void insert(list * head, list * tail, list * p);
void makelist(list * & head, list * & tail);
void printlist(list* head, list* tail);
void Invertlist(list* head, list* tail);
void Del_Sam(list * & head, list * & tail);

/**/
void main()
{
	setlocale(LC_ALL, "Russian");
	list *head, *tail;

	makelist(head, tail);
	cout << "Исходный список:" << endl;

	printlist(head, tail);

	cout << endl << "Перевернутый список:" << endl;
	Invertlist(head, tail);

	Del_Sam(head, tail);
	cout << endl << "Удалены элементы, входящие в точностии 2 раза:" << endl;
	printlist(head, tail);


	cout << "" << endl;
	system("pause");
}

/**/
void insert(list * head, list * tail, list * p)
{
	if (p)
	{
		p->next = tail;
		p->pred = tail->pred;
		tail->pred = p;
		p->pred->next = p;
	}
	else
		cout << "Ошибка!" << endl;
}

/*Процедура создания списка*/
void makelist(list * &head, list * &tail)
{
	head = new list;
	tail = new list;
	head->next = tail;
	tail->pred = head;
	cout << "Введите числа до 0:" << endl;
	int k;
	cin >> k;
	while (k != 0){
		list*p = new list;
		p->info = k;
		insert(head, tail, p);
		cin >> k;
	}
	return;
}

/*Процедура вывода списка на экран*/
void printlist(list* head, list* tail)
{
	if (head && tail)
	{
		list * p = head->next;
		while (p != tail){
			cout << p->info << ends;
			p = p->next;
		}
	}
	return;
}

/*Процедура удаления списков элемента, входящие в него в точности 2 раза*/
void Del_Sam(list * & head, list * & tail)
{
	list * p = head; // Указываем на голову
	map <int, int> myMap; // Используем map для хранение пары значение -> количество
	while (p)
	{
		myMap[p->info]++; // Считаем количество одинаковых элементов
		p = p->next;
	}

	p = head; // p присваиваем к голове

	while (p)
	{
		if (myMap[p->info] == 2) // Если элементов было два
		{
			(p->next)->pred = p->pred; // Переставляем указатель следующего элемента
			(p->pred)->next = p->next; // Переставляем указатель предыдущего элемента
			list * t = p;
			p = p->next;
			delete p; 
		}
		else
			p = p->next;
	}
}

/*Процедура перевертывания списка*/
void Invertlist(list* head, list* tail)
{
	if (head && tail)
	{
		list * p = tail->pred; // Идем с конца списка
		while (p != head) // Пока p не дошел до головы
		{
			cout << p->info << ends;
			p = p->pred;
		}
	}
	return;
}
FunkyDanky вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив целых чисел logikal C# (си шарп) 1 17.04.2014 20:07
Работа с файлами: Дан файл целых чисел. Преобразовать его, удалив нечетные числа. Порядок следования четных чисел сохранить. Olga92 Паскаль, Turbo Pascal, PascalABC.NET 2 23.01.2014 06:16
C# Дан файл целых чисел. RioShark Помощь студентам 0 17.05.2013 08:45
дан массив А из К целых чисел. amikulia Помощь студентам 1 14.01.2011 12:41