Witam. Mam taki problem. Sortowanie listy działa, ale nie mam pojęcia jak zrobić wersję z wartownikiem. Ktoś ma jakiś pomysł?
#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(int *a, int *b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}
void Sortowanie(lista *l)
{
lista p,q,s;
for(s=q=NULL;;s=NULL)
{
for(p=*l;p->nast!=q;p=p->nast)
{
if(p->klucz>p->nast->klucz)
{
swap(&p->klucz, &p->nast->klucz);
s=p->nast;
}
}
if(!(q=s)) break;
}
}
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");
Sortowanie(&l);
WyswietlListeP(l);
break;
case 3:
printf("Wyswietlanie listy z porzadkiem - wersja z wartownikiem\n");
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;
}