Ciao, il problema sta nelle prime due righe del primo for. Infatti ad ogni iterazione sposti i puntatori "precedente" e "successivo" all'inizio della lista. Cosi` facendo scambi sempre la prima coppia di elementi. Per risolvere il problema ti basta spostare prima del for i primi 2 assegnamenti.
P.s. la prossima volta che vuoi inserire del codice leggibile, indentalo bene e mettilo in un blocco code. Cosi` ti possiamo aiutare meglio
Cmq ti posto il codice corretto:
void bubblesort_c(puntalista listapunt){
int i,j,temp,elementi=0;
puntalista cursore,precedente,successivo;
cursore=listapunt;
while(cursore!=NULL){ //mi determino di quanti elementi è fatta la lista
elementi++;
cursore=cursore->prossimo;
}
/* righe spostate da dentro il for */
precedente=listapunt;
successivo=listapunt;
successivo=successivo->prossimo;
/* ------------------------------- */
for(i=0;i<=elementi-2;i++){//algoritmo bubblesort
for(j=0;j<=elementi-2;j++){ //scorro la lista
if(precedente->dato > successivo->dato){ //scambio
temp=precedente->dato;
precedente->dato=successivo->dato;
successivo->dato=temp;
}
}
precedente=successivo;
successivo=successivo->prossimo;
}
}
ciao ciao