PDA

View Full Version : [C] Liste Circolari Aiuto Esercizio


xbubbax
03-04-2008, 16:35
Mi date qualche suggerimento su come fare uesto esercizio in un modo semplice?
Scrivere una funzione per fondere in unica lista circolare ordinata due liste circolari ordinate

Una volta l'avevo risolto ma il codice era bello lungo, ora vorrei provare una strada alternativa

suggerimenti?

f.bandiera
04-04-2008, 00:26
Ciao, così al volo non ho del codice sottomano, ma di sicuro avevo fatto una raccolta delle funzioni base per manipolare le liste...

Se le due liste sono già ordinate puoi effettuare la fusione in tempo ottimo (omicron di n+m, con n ed m uguali al numero di oggetti nelle liste).

A livello di algoritmo accedi con due puntatori ai primi elementi di ogni lista e poi li confronti e:
1) se elem lista A > elem lista B, allora inserisci elem B e avanzi il puntatore corrispondente di una posizione, poi ripeti il confronto fino a finelista
2) l'esatto contrario
3) se sono uguali, spetta a te la scelta (non inserisci nulla, inserisci un solo elem oppure entrambi) e poi avanzi entrambi i puntatori e passi a confrontare gli elem successivi

NB: la procedura la puoi fare iterativa con
do {...} while ( !finelista(A) && !finelista(B) )
come clausola di chiusura, poi, se è finita la lista B e la A non ancora allora dovrai semplicemente finire di copiare gli elem rimanenti (che sono già ordinati) o viceversa quelli di B se finisce prima A...

Magari se trovo un po' di codice domani te lo posto.
Ciao