non riesco a scambiare il primo elemento con il secondo, non capisco dove sbaglio. Come dovrei fare?
grazie&ciao =)
non riesco a scambiare il primo elemento con il secondo, non capisco dove sbaglio. Come dovrei fare?
grazie&ciao =)
assumendo che il tipo lista abbia un campo next di tipo lista *, se l è la testa della lista:
if(l -> next == NULL)
return;
lista *primo = l;
lista *secondo = l -> next;
lista *terzo = secondo -> next;
l = secondo;
l -> next = primo;
l -> next -> next = terzo;
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals
ok ci sono arrivato da solo..
ora vorrei fare l'ordinamento.. a livello di logica come devo comportare? devo distinguere 3 casi? testa,centro e fine della lista?
perchè non so come comportarmi con la testa visto che quando sposto un elemento se capita al primo posto devo associargli la testa della lista e nel caso in cui sono all'ultimo elemento il prox sarà null..
io ti direi di fare cosi: creati una funzione di scambio di due elementi di tipo lista *, in modo che quando esegui l'ordinamento, se hai bisogno di scambiare due elementi lo fai fare a questa funzione. Per scambiare due elementi si una lista hai bisogno di avere oltre ai puntatori agli elementi da scambiare, anche i puntatori ai rispettivi elementi precedenti, ad esempio, se devi scambiare 'c' ed 'f', e la lsita è questa:
a-b-c-d-e-f-g-h
devi collegare l'elemento che precede 'c' (b) con 'f', e l'elemento che precede 'f' (e) con b, oltre a collegare poi 'f' con 'd' e 'c' con 'g'. Ma l'importante è avere i puntatori ai precedenti, peril l'elemento successivo lo puoi sapere con il campo link. Nota che se un elemento ha come precedente NULL significa che è i èprimo della lista, e quindi se lo scambi con un altro elemento sarà qesto ad esesere la testa della lista
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals
a logica so come farlo è che non riesco a implementare il codice crasha sempre il programma, devo usare due cicli for annidati?
dipende dall'algoritmo che vuoi usare...ti consiglio prima di fare n algoritmo che lavora semplicemente su un array di numeri, e poi, una volta che funziona lo adatti alle liste; qui trovi alcuni algoritmi per array, i primi due sono semplici
http://ciips.ee.uwa.edu.au/~morris/Y...0/sorting.html
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals
per array li so già fare è per le liste che incontro un pò di problemi..
prova a postare il codice...hai seguito il mio suggerimento di riscrivere l'algorimo in modo tale da utilizzare una funzione di scambio degli elementi?
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals
stavo tentando di farlo, in pratica devo passare l'indirizzo della testa e dei due elementi che devo scambiare?Originariamente inviato da anx721
prova a postare il codice...hai seguito il mio suggerimento di riscrivere l'algorimo in modo tale da utilizzare una funzione di scambio degli elementi?
se la testa è una variabile globale non è necessaria passarla; poi vano passati i due elementi da scambiare e gli elementi ad essi precedenti. Una soluzione alternativa consiste nel passare solo di due elementi da scambiare, in questo caso pero devi passare i puntatori ai puntatori a tali elementi.
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals