Albero binario di ricerca
-
- Prode Principiante
- Messaggi: 27
- Iscrizione: giovedì 12 maggio 2016, 11:12
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS
- Sesso: Maschile
Re: Albero binario di ricerca
Il fatto è che ci hanno assegnato questo progetto da consegnare tra una settimana e non avendo chissà che basi perché sono al primo anno e non avendo avuto un insegnamento adeguato a mio parere, faccio difficoltà, questo consiglio lo terrò a mente e vedrò di fare qualche esercizio semplice per entrare bene nel meccanismo, di sicuro risposte come le ultime due sono più costruttive e mi aiutano sicuramente, infatti vi ringrazio per l'aiuto e sono su questo forum proprio per questo, ora mi cerco di fare qualche esercizio vedo cosa riesco a fare in una settimana, grazie dei consigli ci risentiremo sicuramente ahahahaha. Bellissima la penultima risposta comunque grazie mille.
- SuperStep
- Entusiasta Emergente
- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: Albero binario di ricerca
@ienaplinky hai ragione! non mi ero accorto di dove finisse il for (maledetta identazione, ero convinto che il for fosse solamente questo:)
invece tutto il blocco e' un'unico for
ma questa indentazione mi aveva ingannato:
ad ogni modo, quello che intendevo io per la sintassi
e' che si esprime semplicemente in
per cui:
riguardo invece questa dichiarazione
quello che dici sostanzialmente e':
se posseggo la radice e devo modificarla nella funzione, non posso farlo'.
in realta' basta orientare le funzioni in modo che restituiscano sempre la radice, nel caso in cui devi prendere un elemento, basta creare una struttura del tipo
e ritornare questa struttura con la testa ed il nodo estratto, per poi prelevarle nelle istruzioni successive.
Codice: Seleziona tutto
for (nodo_p = padre_p = *radice_p;((nodo_p != NULL) && (nodo_p->matricola != matricola));
Codice: Seleziona tutto
for (nodo_p = padre_p = *radice_p;((nodo_p != NULL) && (nodo_p->matricola != matricola)); padre_p = nodo_p, nodo_p = (matricola < nodo_p->matricola) ? nodo_p->sx_p : nodo_p->dx_p);
Codice: Seleziona tutto
for (nodo_p = padre_p = *radice_p;((nodo_p != NULL) && (nodo_p->matricola != matricola));
padre_p = nodo_p, nodo_p = (matricola < nodo_p->matricola)?
nodo_p->sx_p:
nodo_p->dx_p);
Codice: Seleziona tutto
a = b,b = c;
Codice: Seleziona tutto
a = b = c;
Codice: Seleziona tutto
padre_p = nodo_p = (matricola < nodo_p->matricola) ? ...
non sono d'accordo (sara' perche' programmo da troppo ad oggetti).il doppio puntatore serve perchè quando l'albero è vuoto non hai modo di modificare la radice senza ritornare l'albero. Poichè il valore di ritorno è occupato ci vuole per forza.
quello che dici sostanzialmente e':
se posseggo la radice e devo modificarla nella funzione, non posso farlo'.
in realta' basta orientare le funzioni in modo che restituiscano sempre la radice, nel caso in cui devi prendere un elemento, basta creare una struttura del tipo
Codice: Seleziona tutto
typedef struct coppia_nodo_albero_bin_t {
nodo_albero_bin_t * testa;
nodo_albero_bin_t * estratto;
} coppia_nodo_albero_bin_t;
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
- ienaplinsky
- Scoppiettante Seguace
- Messaggi: 954
- Iscrizione: giovedì 21 gennaio 2010, 9:56
- Località: Napoli
Re: Albero binario di ricerca
Così non è la stessa cosaSuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4883988#p4883988][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: ad ogni modo, quello che intendevo io per la sintassie' che si esprime semplicemente inCodice: Seleziona tutto
a = b,b = c;
per cui:Codice: Seleziona tutto
a = b = c;
Codice: Seleziona tutto
padre_p = nodo_p = (matricola < nodo_p->matricola) ? ...
Codice: Seleziona tutto
padre_p = nodo_p = (matricola < nodo_p->matricola) ? ...
Codice: Seleziona tutto
padre_p = nodo_p, nodo_p = (matricola < nodo_p->matricola) ? nodo_p->sx_p : nodo
Per il doppio puntatore sono scelte. Lui ha deciso di ritornare un valore invece dell'albero perciò utilizzare un doppio puntatore è l'unico modo per modificare la radice. Se ritorni l'albero ovviamente non serve.
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti