Ti ringrazio per la risposta celere e per l'utilissimo link!! Mi sa che hai trovato la soluzione al mio problema
Posso disturbarti ancora un po'? Ho usato il bubblesort riadattato per la mia lista ma noto che mi elimina tutti gli elementi della lista tranne 2
posto il codice così puoi vedere cosa ho combinato:
codice:
/* Il programma consente di inserire un numero di informazioni relative ad alcune persone, il cui numero è definito dall'utente a run-time, salvarle in una lista dinamica e stamparle in ordine crescente secondo il campo "age" di ogni persona */
#include <stdio.h>
#include <stdlib.h>
#define MAXN 15
typedef struct Person /* Definizione delle lista "Person" */
{
char name[MAXN];
int age;
double weight;
struct Person *next;
} Person;
// Prototipi di funzioni usate nel programma
Person *createlist(Person *list);
void fillperson(Person *list);
void printlist(Person *list);
void bubblesort(Person *list);
/* Nel main è inserito il primo nodo della lista "people" e successivamente si inseriscono gli altri tramite funzione */
int main()
{
Person *people;
char s;
people = (Person *) malloc(sizeof(Person));
people=NULL;
people=createlist(people);
printf("Inserire nuova voce? (s/n) ");
s=getchar();
while((s = getchar()) =='s')
{
getchar();
putchar('\n');
putchar('\n');
people=createlist(people);
putchar('\n');
printf("Inserire nuova voce? (s/n) ");
s=getchar();
}
printlist(people);
bubblesort(people);
printlist(people);
free(people);
return 0;
}
// Funzione che aggiunge un nuovo nodo alla lista già esistente
Person *createlist(Person *list)
{
Person *nuovo;
Person *p;
nuovo = (Person *) malloc(sizeof(Person));
fillperson(nuovo);
if(list==NULL)
list=nuovo;
else
{
p=list;
while(p->next)
p=p->next;
p->next = (Person *) malloc (sizeof(Person));
p->next = nuovo;
}
return list;
}
// Funzione che acquisisce in imput i dati di ogni nodo
void fillperson(Person *list)
{
printf("Inserire il nome della persona: ");
gets(list->name);
printf("Inserire l'eta' della persona: ");
scanf("%d",&(list->age));
printf("Inserire l'altezza della persona: ");
scanf("%lf",&(list->weight));
list->next=NULL;
}
// Funzione per stampare l'intera lista
void printlist(Person *list)
{
printf("\n\nInizio lista ---> \n\n");
while(list)
{
printf("Nome: %s\n",list->name);
printf("Eta': %d\n",list->age);
printf("Altezza: %.2lf\n\n\n",list->weight);
list=list->next;
}
printf("---> Fine lista\n\n");
}
// Algoritmo di ordinamento
void bubblesort(Person *list)
{
Person *a = NULL;
Person *b = NULL;
Person *c = NULL;
Person *e = NULL;
Person *tmp = NULL;
while(e != list->next)
{
c = a = list;
b = a->next;
while(a!=e)
{
if(a->age > b->age)
{
if(a==list)
{
tmp = b->next;
b->next = a;
a->next = tmp;
list = b;
c = b;
}
else
{
tmp = b->next;
b->next = a;
a->next = tmp;
c->next = b;
c = b;
}
}
else
{
c = a;
a = a->next;
}
b = a->next;
if(b == e)
e = a;
}
}
}
Naturalmente sarà pieno di errori che un programmatore esperto non si sognerebbe di commettere però pensa che solo all'inizio XD Ti ringrazio nuovamente per la pazienza dimostrata e per la disponibilità