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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 09:36   #1
Macheta
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
Радость Односвязный линейный список типа очередь С++

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

void main()
{
	struct con
	{
		int data;
		con *link;
	};

	int f=1, s, w, copy_w = 0,b = 0;
	con *top, *last, *first; 
	printf ("Vvod chisla \n"); //Создание первого узла
	scanf("%d", &w);
	top = new con;
	top->link = NULL;
	top->data = w;
	first = last = top;

	while (f==1) //Заполнение списка
	{
		f=1;
		printf("Vvod chisla \n");
		scanf("%d", &w);
		top = new con;
		top->link = NULL;
		top->data = w;
		last->link = top; 
		last = top;
q: 
		printf ("konec spiska? y/n \n");
		s=getch();
		switch(s)
		{
		case 'y': f=0; break;
		case 'n': f=1; break;
		default: goto q;
		};
	}

	top = first; //Вывод полученного списка на экран
	while (top != NULL)
	{ 
		printf("\n");
		printf("%d", top->data);
		top = top->link;
	}
	printf("\n");
	getch();

	con *cur = top; //Поиск узлов, содержащих палиндромы и удаление этих узлов(Не выполняется, переходит сразу к выводу списка)
	while (cur != NULL)
	{ 
		copy_w=w;
		while (copy_w!=0)
		{
			b=b*10+copy_w%10;    
			copy_w/=10;
		}
		if (w==b)
		{
			top = first;
			first = first->link;
			delete top;
		}
		else cur = cur->link;
	}

	top = first; //Вывод полученного списка на экран
	while (top != NULL)
	{ 
		printf("\n");
		printf("%d", top->data);
		top = top->link;
	}
	getch();

}
Собственно вот код, саму проблему можно найти в комментариях в коде. Помогите пожалуйста)

Последний раз редактировалось Stilet; 24.03.2013 в 13:34.
Macheta вне форума Ответить с цитированием
Старый 24.03.2013, 10:26   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Код:
con *cur = top; //Поиск узлов, содержащих палиндромы и удаление этих узлов(Не выполняется, переходит сразу к выводу списка)
 while (cur != NULL)
А чего вы ожидали то? У вас топ чему равен после цикла? НУЛЛ...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 24.03.2013, 11:20   #3
Macheta
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

Смотрел смотрел я на код после вашего совета, но не понял где исправлять ошибку
Macheta вне форума Ответить с цитированием
Старый 24.03.2013, 13:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но не понял где исправлять ошибку
Видимо тут: con *cur = first;
Ибо подозреваю что top - это конец очереди.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2013, 13:49   #5
Macheta
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

поменял в этом месте top на first ничего не изменилось, так как top - это начало очереди, в принципе то же, что и first
Macheta вне форума Ответить с цитированием
Старый 24.03.2013, 14:04   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
так как top - это начало очереди, в принципе то же, что и first
Правда? Откуда такие выводы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2013, 14:16   #7
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Еще раз:
Код:
while (top != NULL)
	{ 
		printf("\n");
		printf("%d", top->data);
		top = top->link;
	}
	printf("\n");
	getch();
При каком условии закончится цикл? Что будет лежат в top?

Код:
	con *cur = top; //Поиск узлов, содержащих палиндромы и удаление этих узлов(Не выполняется, переходит сразу к выводу списка)
	while (cur != NULL)
Что вы запишите из top в cur? Почему цикл должен хоть раз прокрутится?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 24.03.2013, 14:47   #8
Macheta
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

И всё равно я не могу понять в чём проблема
тупые списки -_-

После того цикла в top лежит NULL, следовательно в cur тоже будет лежать NULL, это я понял
я не могу сообразить, как это исправить

top = first;
con *cur = top; //Поиск узлов, содержащих палиндромы и удаление этих узлов(Не выполняется, переходит сразу к выводу списка)
while (cur != NULL)

делал вот так - не помогло

Последний раз редактировалось Stilet; 24.03.2013 в 16:47.
Macheta вне форума Ответить с цитированием
Старый 24.03.2013, 16:50   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не помогло
Ты не хочешь внимательнее прочитать что я написал?
И обратить внимание на то что написано в коде ниже:
Код:
	top = first; //<- Сюда глазками смотреть до полного просветления
	while (top != NULL)
	{
Я конечно понимаю что не ты код писал, но всетки не поленись его изучить и сравнить с тем что ты пишешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2013, 19:37   #10
Macheta
Новичок
Джуниор
 
Регистрация: 24.03.2013
Сообщений: 5
По умолчанию

код я сам писал
писал бы не сам, он бы работал

И глазками я на код уже два дня смотрю, а просветления не вижу

Последний раз редактировалось Stilet; 24.03.2013 в 20:19.
Macheta вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязный линейный список flecso Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2012 02:51
C++ Односвязный линейный список vadiprog Помощь студентам 1 01.05.2012 21:27
С++ линейный односвязный список Lady IcE Помощь студентам 3 25.04.2011 20:24
Линейный-односвязный список Айдар Помощь студентам 1 01.06.2010 10:20
Линейный односвязный список Absinth Помощь студентам 4 11.11.2008 20:29