lista liniowa

0

witam wszystkich. Mam problem ze stworzeniem funkcji odpowiedzialnej za sortowanie listy jednokierunkowej. Chcialem napisac to w taki sposob:

void sortuj(moja *wezel)
{
	int licznik=0;
	moja *head;
	moja *aktualny;
	moja *nastepny;
	head=wezel;
	
	
	while(wezel->next!=NULL)
	{
		licznik++;
		wezel=wezel->next;	
	}
	aktualny=head->next;
	nastepny=aktualny->next;
	for(int i=0; i<licznik; i++)
	{

		while(aktualny->next!=NULL)
		{	
			
				if(aktualny -> value > aktualny->next->value)
				{
					aktualny->next->value=aktualny->value;
					aktualny->value=nastepny->value;
					
				}	
			}
	
			aktualny=aktualny->next;
			nastepny=nastepny->next;
		}			
	}
	
}

niestety kod nie dziala tak jak chce...sprawdza co jest pod aktualnym adresem...jesli ta liczba jest wieksza od tej ktora jest pod nastepnym adresem to chcialbym je zamienic miejscami, jednak efekt jest daleko od oczekiwanego..prosze o pomoc i z gory dziekuje

0

for(int i=0; i<licznik; i++)
{
aktualny=head;
nastepny=aktualny->next;

    if(aktualny->next) while(nastepny->next)
            {
0

hmm albo jestem bardzo oporny, albo...albo nie ;) Dokonalem zaproponowanych zmian: wysylam caly kod, bo w sumie nie pojawia sie zaden blad, lecz przy wyswietlaniu wartosci ktore mialy zostac posortowane, z danymi dzieje sie cos "niemilego" i zamiast posortowanych wyswietla jakies "smieci"



struct moja{
	
	int value;
	moja *next;
	
};

void dodaj(moja *wezel)
{	
	moja *nowy=(struct moja*)malloc(sizeof(struct moja));
	std::cout << "Wartosc: ";
	std::cin >> nowy->value;
	nowy->next=NULL;
	
	while(wezel->next!=NULL)
	{
		wezel=wezel->next;
		
	}
	wezel->next=nowy;
	
}

void wyswietl(moja *wezel)
{
	
	while(wezel->next!=NULL)
	{	
		wezel=wezel->next;
		std::cout << " " << wezel->value;
		
	}
		
}
void sortuj(moja *wezel)
{
	int licznik=0;
	moja *head;
	moja *aktualny;
	moja *nastepny;
	head=wezel;

	while(wezel->next!=NULL)
	{
		licznik++;
		wezel=wezel->next;	
	}
	
	for(int i=0; i<licznik; i++)
	{
		aktualny=head;
		nastepny=aktualny->next;
		if(aktualny->next)
		{
			while(aktualny->next)
			{
			
				if(aktualny->value > aktualny->next->value)
				{
					aktualny->next->value=aktualny->value;
					aktualny->value=nastepny->value;
				
				}
				aktualny=aktualny->next;
                                nastepny=nastepny->next;
				
			}
		
		}
	}				
}

int main()
{
	moja *glowa;
	glowa=(struct moja*)malloc(sizeof(struct moja));
	glowa->next=NULL;
	
	int wybor;
	while(1)
	{
	std::cout << "\n1 dodaj ";
	std::cout << "\n2 Sortuj ";
	std::cout << "\n3 wyswietl ";
	std::cin >> wybor;
	
	
	switch(wybor)
	{
		case 1: dodaj(glowa);
		break;
		case 2: sortuj(glowa);
		break;
		case 3: wyswietl(glowa);
		}
}	
			
	system("PAUSE");
}

0

Wyświetlenie:
while(wezel!=NULL)
zaś:
wezel=wezel->next;
po wyświetleniu.

Dodawanie:
Przy takiej deklaracji funkcji nawet nie da się poprawnie dodać.

main:
moja *glowa=NULL;
i żadnych przydzieleń pamięci.

0

coz wiec jest takiego "mega niedobrego" w funkcji dodajacej element na koniec?

1 użytkowników online, w tym zalogowanych: 0, gości: 1