Witam! Mam problem z posortowaniem listy jednokierunkowej. Program kompiluje się lecz nie sortuje. Kod poniżej. Ktoś wie, dlaczego tak się dzieje?
#include <stdio.h>
#include <stdlib.h>
struct el
{
int klucz;
struct el *nast;
};
typedef struct el elListy;
typedef elListy *lista;
void WyswietlListeP( lista _lista )
{
lista l = _lista;
while ( l ){
printf ("%d->", l->klucz);
l = l->nast;
}
printf ("\n");
}
void DNPL (lista *l, int i) // Dodanie na poczatek listy
{
lista p=malloc(sizeof(elListy)) ;
if (i>0)
{
p->klucz=i;
p->nast=*l;
*l=p;
}
else
{
printf("Liczba jest ujemna. Podaj dodatnia:\n", i);
}
}
void swap(lista *a, lista *b)
{
int temp=(*a)->klucz;
(*a)->klucz=(*b)->klucz;
(*b)->klucz=temp;
}
void bublesort(lista *start)
{
int zamieniony,i;
lista p;
lista l=0;
do {
zamieniony=0;
p=*start;
while(p->nast!=l)
{
if(p->klucz>p->nast->klucz)
{
swap(&p,&p->nast);
zamieniony=1;
}
p=p->nast;
}
l=p;
}
while(zamieniony);
}
lista *merge(lista *l1, lista *l2)
{
lista *tmp=l1;
while((*l1)->nast)
*l1=(*l1)->nast;
(*l1)->nast=*l2;
bublesort(tmp);
return tmp;
}
int main()
{
int wybor;
int liczba;
struct el *l=0;
struct el *l1=0;
struct el *l2=0;
int i;
printf("[1] Dodanie na poczatek listy\n");
printf("[2] Wyswietlanie listy z porzadkiem\n");
printf("[3] Wyswietlanie listy z porzadkiem - wersja z wartownikiem\n");
printf("[4] Wyswietl liste\n");
printf("[5] Wyjscie z programu\n");
do{
printf("Wybierz: ");
scanf("%d", &wybor);
switch(wybor)
{
case 1:
printf("Podaj liczbe: ");
scanf("%d", &liczba);
DNPL(&l, liczba);
break;
case 2:
printf("Wyswietlanie listy z porzadkiem\n");
merge(&l1, &l2);
break;
case 3:
printf("Wyswietlanie listy z porzadkiem - wersja z wartownikiem\n");
merge(&l1, &l2);
break;
case 4:
printf("Wyswietlanie listy od poczatku\n");
WyswietlListeP(l);
printf("\n");
break;
case 5:
printf("Wyszedłes z programu!");
return 0;
break;
}
}while( wybor>=1 );
return 0;
}