PDA

View Full Version : [C] Chiarimento esercizio sulle liste


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.

qwerty86
03-06-2008, 13:58
Bhè alla prima domanda ti sei risposto da solo con la seconda. Comunque in generale è tramite i puntatori agli elementi successivi che scorri la lista e poi avere i riferimenti agli elementi che ti servono.:)

vizzz
03-06-2008, 22:41
e l'ultimo elemento fallo puntare a NULL.
occhio che devi fare in modo di non spezzare la lista se cancelli un elemento centrale.