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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2016, 01:07   #1
Зехель
Новичок
Джуниор
 
Регистрация: 09.01.2016
Сообщений: 1
По умолчанию Проблема с выводом списка (С++)

Доброго времени суток. Проблема с кодом, точнее две, но думаю, что если решить проблему одну,то и вторая уйдет. Первая проблема в том, что некорректно заносятся данные в список (пример на скриншоте). А вторая в том, что функция проверки идентичности двух списков не работает и во время выполнения выдается ошибка:
"0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000."
Код:
#include <iostream>

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

struct List * CreateList( int ); // Создание списка.
struct List * AddElement(List *, int); //Добавление элементов.
void CompOfList(List *, List *); //Сравнение двух списков. Как реализовать эту функцию, подскажите пожалуйста.
void PrintList(List *); // Вывод списка на экран.

typedef int TypeList;

struct List
{
	TypeList node;
	List *next;
};

int main()
{
	setlocale(LC_ALL, "Russian");

	cout << "Введите элементы первого списка:\n";
	int x;
	cin >> x;
	List *first = CreateList(x);
	List *current;
	do {
		cin >> x;
		current = AddElement(first, x);
	} while (x != 0);
	
	PrintList(first);

	cout << "Введите элементы 2-го списка\n";
	cin >> x;
	List *second = CreateList(x);
	do {
		cin >> x;
		current = AddElement(second, x);
	} while (x != 0);

	PrintList(second); 
	CompOfList(first, second);


	system("pause");
}

struct List *CreateList(int x)
{
	List *first = NULL;
	first = new List;
	first->node = x;
	first->next = NULL;
	return first;
}

struct List * AddElement(List *first, int x)
{
	List *Temp, *p;
	Temp = new List;
	p = first->next;
	first->next = Temp;
	Temp->node = x;
	Temp->next = p;
	return Temp;
}

void PrintList(List *first)
{
	List *p;
	p = first;
	cout << "Элементы введенного списка:\n";
	do {
		cout << p->node << " ";
		p = p->next;
	} while (p != NULL);
	cout << endl;
}

void CompOfList(List *first, List *second)
{
	List *check1, *check2;
	check1 = first;
	check2 = second;
	bool flag = true;
	do {
		if (check1->node == check2->node)
		{
			check2 = check2->next;
			check1 = check1->next;
		}
		else
		{
			cout << "Списки разные.\n";
			flag = false;
		}
	} while (check1 != NULL || check2 != NULL || flag != false);
	if (flag == true)
	{
		cout << "Списки идентичны.\n";
	}
}
Изображения
Тип файла: jpg Screen.jpg (15.1 Кб, 132 просмотров)
Зехель вне форума Ответить с цитированием
Старый 09.01.2016, 04:30   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,713
По умолчанию

А проблемы то нет. Как вставляли, так и получили.
p51x вне форума Ответить с цитированием
Старый 09.01.2016, 07:47   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
while (check1 != NULL || check2 != NULL || flag != false);
А может так?:
Код:
 while (check1 && check2 && flag);
Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом С++ Ikiru Помощь студентам 4 09.07.2014 15:23
Проблема с выводом (С++) spinogryz_ua Помощь студентам 3 14.01.2013 21:45
Проблема с выводом eymar Общие вопросы C/C++ 6 23.09.2012 22:50
проблема с выводом -=Andriushka=- Помощь студентам 0 13.04.2011 21:46