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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2013, 18:30   #1
blond-kristi
Новичок
Джуниор
 
Регистрация: 01.06.2013
Сообщений: 1
По умолчанию Топологическая сортировка ( С++)

У меня реальный клик о помощи!! кто умеет работать в С++ ? у меня есть прога топологической сортировки и надо написать функцию удаления...у меня даже функция есть но прога не хочет идти выдает ошибки(( прошу писать в личку ну или здесь ) буду очень благодарна))+10 к карме вам обеспечено)
Код:
#include "StdAfx.h"
#include "Leader_List.h"

Leader_List::Leader_List(void)//конструктор класса лист
{
head=0;
}

Leader_List::Trailer::Trailer(Leader_List::Leader*l)
{
	lead=l;
	next=0;
}

Leader_List::Leader::Leader(int ver)
{
	key=ver;
	count=0;
	trail=0;
}

Leader_List::Leader*Leader_List::Find_ver(int v)// передаем номер вершины
{
	Leader_List::Leader *p=head;
	while(p)
		if(p->key==v)return p;
		else p=p->next;
	return 0;

}
Leader_List :: Leader* Leader_List :: Find_count0()
{
	Leader_List :: Leader *p=head;
	while(p)
		if(p->count==0)
			return p;
		else p=p->next;
			return 0;
}


void Leader_List::Print(System::Windows::Forms::ListBox^ lb)// выводим на экран 
{
	Leader_List::Leader *p=head;
	System::String^s;
	while(p){
	s=System::Convert::ToString(p->key)+" "+System::Convert::ToString(p->count);
	lb->Items->Add(s);
	p=p->next;
	}
}
void Leader_List::Input(int a, int b)//вводим инфу о дуге в графе
{ 
	Leader_List::Leader*p,*q;
	p=Find_ver(a);
	
	if(p==0)                                  //проверяем ввели ли вернину п если не ввели то записываем 
	{
		p=new Leader_List::Leader(a);
		p->next=head;
		head=p;
	}
	q=Find_ver(b);
	if(q==0)
	{
		q=new Leader_List::Leader(b);
		q->next=head;
		head=q;
	}
	q->count++;   
	Leader_List::Trailer*x;     // устанавлливаем связь кто предшественник кто последователь
	x=new Leader_List::Trailer(q);
	x->next=p->trail;       
	p->trail=x;
}
void Leader_List::Del_ver(int key);
{
	Leader* i = head, *j = 0, *k;//мы обходим весь список
	while (i->key != key)//голову заносим в кляч и пока ключ не равен ключу,т.е пока не прошли весь список,как только ключ равен ключу список закончен
	{
		j = i; //предку присваеваем голову 
		i = i->next;//и присваеваем следующий элемент
	}
	if (j != 0)//если голова не равна 0,те в у нее есть предки
	{
		j->next = i->next;//то жи заносим в следующий элементи изаносим в следующий элемент
	}
	else
	{
		head = head->next;
	}
	Trailer *q = i->trail, *t;
	while (q)
	{
		q->lead->count --;
		t = q;
		q=q->next;
		delete t;
	}
	k = head;
	while (k)
	{
		t = k->trail; q = 0;
		while (t)
		{
			if (t->lead == i)
			{
				if (q)
				{
					k->trail = k->trail->next;
				}
				else
				{
					q->next = t->next;
				}
				t->lead = 0;
				delete t;
			}
			else
			{
				q = t;
				t = t->next;
			}
		}
		k = k->next;
	}
	delete i;
	i = 0;
}
System :: String^ Leader_List :: TopSort()
{
	Leader_List::Leader *p;   
	Leader_List :: Trailer *q;
	System :: String^ s;        //отсортированная строка

	p = Find_count0 (); // ищим первый узел с полем каунт =0
	if (!p) s="cikl";  // проверка если такого эл-та нет то цикл 
	while (p)
	{
		if (p)
		{
			s+=p->key + " "; //присваиваем значение узла
			q = p->trail;    //ку присваиваем значение трэйлеров 
			while (q)
			{
				q->lead->count --; //если у него есть последователи то у наи уменьшем поле каунт на 1
				q=q->next;  //на след эл трейлеров
			}
			
			p->count = -1;    //полю каунт присваем -1 что бы не считать 
		}
		p = Find_count0 ();
	}
	p=head;                 //переходим на 1 эл
	while (p)
		{if (p->count!=-1)     //если у нас эл с полем каунт не равен 1 то есть цикл т е выход если нет то идём дальше
			{s+="cikl"; break;}
		 p=p->next;}

	return s;
	
}
проблемы с функцией void Leader_List::Del_ver

Последний раз редактировалось Stilet; 01.06.2013 в 20:55.
blond-kristi вне форума Ответить с цитированием
Старый 01.06.2013, 20:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
while (i->key != key)//голову заносим в кляч и пока ключ не равен ключу,т.е пока не прошли весь список,как только ключ равен ключу список закончен
{
j = i; //предку присваеваем голову
i = i->next;//и присваеваем следующий элемент
}
Код:
for(i=head;i && i->key!=key;i=i->next);
if(!i) {тут обработать исключение - i == null}
...
Остальное с трудом понимаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Топологическая сортировка Macmeprag Помощь студентам 1 12.05.2012 08:05
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
[C]Топологическая сортировка_нужно немного изменить программу Pblcb Помощь студентам 2 23.11.2011 19:09
Топологическая сортировка. amsask Помощь студентам 0 05.05.2010 20:05
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57