Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Community > Tech
 
[c] cancellazione elementi selezionati
Clicca QUI per vedere il messaggio nel forum
maynard80
ragazzi scusate sono nel pallone, mi dite come cancellare gli elementi di una lista?

la liste è formata da nodi del tipo

struct nodo{
int x;
int y;
struct nodo *next;
}

voglio cancellare dalla lista tutti i nodi la cui x è n

nodo *cancellaSelezionati(*struct nodo head, int n);

storincoglionendo,pleaseee!

Skilotto83
boh...metti il puntatore dell'elemento n-esimo della lista a null...
Una roba del genere...

yeah
code:
nodo *cancella_selezionati(struct nodo *head, int n) { struct nodo *found; while(head->next) if(head->next->x == n) { found = head->next; head->next = head->next->next; free(found); } return head; /* o cur... non so cosa possa essere più utile */ }


Due considerazioni:
- inizia il controllo dal secondo nodo in lista; questo è un problema derivante dal fatto che non ho ancora trovato un modo per gestire il primo elemento di una lista concatenata.
- non ritorna niente di utile, visto che può cancellare 0 o più nodi


Tutto questo assolutamente non testato :D

[edit] Manca qualcosa...
[edit2] Ora dovrebbe esserci tutto...
[edit3]No, ci sono degli errori...
[edit4]Ora dovrebbe essere a posto :)

DeepBlue
queste slide potrebbero tornarti molto utili:

http://www.di.unipi.it/~gori/Inform...i/Lezione14.pdf

yeah
Vedo che in quelle slide si usa la seconda delle due possibilità:
- oggetto 'finto': serve da testa della lista, non memorizza nessun valore;
- puntatore: la lista è iniziata da un puntatore

Personalmente il problema con il secondo tipo è che (primo esempio che mi viene in mente) nel caso:

[ptr] -> [el1] ->[el2]

per eliminare el1 bisogna tener conto del fatto che a sinistra c'è solo un puntatore e non un elemento completo.

Cmq rileggerò le slide con più attenzione :) Grazie

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate