klarence
31-05-2008, 23:44
Questo è l'esercizio
Sia data una struttura typedef struct lst {int valore; struct lst *succ;}elemento; che rappresenta un elemento di una lista di interi. Il campo valore rappresenta il valore dell’elemento, ed `e compreso fra −100 e 100 (estremi inclusi); il campo succ `e il puntatore all’elemento successivo della lista. Si scriva la funzione elemento *RimuoviDoppioni (elemento *p) che, dato il puntatore ad una lista non ordinata di interi, restituisca il puntatore alla lista ottenuta da p rimuovendo (e deallocando) tutti i doppioni (elementi il cui campo valore `e gi`a presente nella lista). Suggerimento: si consiglia di risolvere il problema facendo una sola passata sui dati ed eventualmente utilizzando uno o pi`u array ausiliari (ma meno memoria utilizzate meglio `e).
2 domande:
1)Ammettiamo che ho 3 elementi della lista: elemento1, elemento2 ed elemento3.Se ad esempio voglio eliminare e deallocare l'elemento2, avendo solo il puntatore all'elemento1, come devo fare?
2)A volte ho bisogno di eliminare l'elemento2 ed avere sottoforma di lista elemento1 ed elemento3, quindi elemento1 deve puntare ad elemento3. Per assegnare al campo *succ di elemento1 il puntatore ad elemento3 va bene fare come vi indico sotto?
-elemento1->succ=(elemento1->succ)->succ
In pratica assegno al puntatore dell'elemento1 all'elemento2 il puntatore di elemento2 all'elemento3.
Sia data una struttura typedef struct lst {int valore; struct lst *succ;}elemento; che rappresenta un elemento di una lista di interi. Il campo valore rappresenta il valore dell’elemento, ed `e compreso fra −100 e 100 (estremi inclusi); il campo succ `e il puntatore all’elemento successivo della lista. Si scriva la funzione elemento *RimuoviDoppioni (elemento *p) che, dato il puntatore ad una lista non ordinata di interi, restituisca il puntatore alla lista ottenuta da p rimuovendo (e deallocando) tutti i doppioni (elementi il cui campo valore `e gi`a presente nella lista). Suggerimento: si consiglia di risolvere il problema facendo una sola passata sui dati ed eventualmente utilizzando uno o pi`u array ausiliari (ma meno memoria utilizzate meglio `e).
2 domande:
1)Ammettiamo che ho 3 elementi della lista: elemento1, elemento2 ed elemento3.Se ad esempio voglio eliminare e deallocare l'elemento2, avendo solo il puntatore all'elemento1, come devo fare?
2)A volte ho bisogno di eliminare l'elemento2 ed avere sottoforma di lista elemento1 ed elemento3, quindi elemento1 deve puntare ad elemento3. Per assegnare al campo *succ di elemento1 il puntatore ad elemento3 va bene fare come vi indico sotto?
-elemento1->succ=(elemento1->succ)->succ
In pratica assegno al puntatore dell'elemento1 all'elemento2 il puntatore di elemento2 all'elemento3.