|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
[C] Come ri riempie un albero di questo tipo?
Raga come si riempie una struttura di questo tipo?
Codice:
struct TipoAlbero
{
char elemento;
struct TipoAlbero *figlio;
struct TipoAlbero *fratello;
};
![]()
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Sei ancora impegnato con la Tassonomia?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
no, il "progetto" l'ho consegnato...ma mi sono accorto che dopo aver fatto, con mille fatiche, funzionare tutto ho sbagliato a far costruire l'albero......
e quindi mo so diventato curioso e vorrei sapere come si riempie normalmente un albero di questo tipo... chi mi aiuta?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
...up...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
e' un albero n-rio; qual è il tuo problema di preciso?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
riempirlo secondo uno schema...nel senso prima il nodo poi gli eventuali figli per poi passare pian piano ai vari eventuali fratelli....
quindi, prendendo ad esempio il disegno che ho postato, seguendo questo ordine: ![]()
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
non ho capito bene cosa vuoi dire.... Lo riempi come vuoi basta che in fase di lettura segui lo stesso schema altrimenti sballi l'ordine
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
comunque non mi sembra una struttura molto astuta... Il nodo radice ha 1 solo figlio e nessun fratello?
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Quote:
cmq il mio quesito era un altro...qualcuno può aiutarmi?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
dai raga....help...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Oct 1999
Messaggi: 111
|
ciao,
non ho capito la domanda. cioè da come hai rappresentato la figura sembra un albero strano ma in effetti è un semplice albero binario in cui ogni nodo ha due rami. per riempire questa struttura devi definire tu un algoritmo sulla base del quale decidi quando prendere il ramo a sinistra e quando prendere il ramo a destra se vuoi riempire l'albero ricreando proprio quella figura, puoi utilizzare un algoritmo di riempimento basato sui confronti in cui se ad esempio il valore da inserire è minore del valore del nodo vai a sinistra (figlio), se il valore del nodo è maggiore della radice, vai a destra(fratello). una possibile soluzione ad esempio è (ho messo dei numeri, per comodità) immetti per primo il valore in cella 1, poi quello in cella 2 ecc |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
si però io non ho mai detto che il mio è un albero ordinato...
il mio problema è diverso, devo costruire un Albero di Tassonomie, il tutto è spiegato in un altro thread, questo: http://www.hwupgrade.it/forum/showpo...6&postcount=17 cmq in generale se io volessi riempire l'albero così: Codice:
radice
figlio_1
figlio_2
figlio_1 (di figlio_2)
figlio_2 (di figlio_2)
figlio_1 (di figlio_2 di figlio_2)
figlio_3 (di figlio_2)
figlio_3
figlio_4
figlio_5
figlio_1 (di figlio_5)
figlio_2 (di figlio_5)
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC Ultima modifica di leadergl : 21-01-2006 alle 12:13. |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Oct 1999
Messaggi: 111
|
ho letto un po' l'altro thread e ho cercato di capire cosa ti potesse servire ma mi manca un piccolo dettaglio: non hai mai specificato come i figli sono legati ai genitori.Questo è alla base dell'algoritmo di costruzione dell'albero.
Comunque, se non ho capito male, tu hai la struttura dell'albero stampata sul file e leggendo una riga alla volta voui ricostruire l'albero? sei già in grado di capire leggendo il file a che livello dell'albero sei? cioà leggendo la sesta riga di Codice:
radice
figlio_1
figlio_2
figlio_1 (di figlio_2)
figlio_2 (di figlio_2)
figlio_1 (di figlio_2 di figlio_2)
figlio_3 (di figlio_2)
figlio_3
figlio_4
figlio_5
figlio_1 (di figlio_5)
figlio_2 (di figlio_5)
sai che sei al terzo livello di figli? e leggendo poi la settima riga sai che sei risalito di un livello? P.S. ho provato a contattarti via msn |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1451
|
La struttura del file è questa, il file devi scorrerlo dall'alto verso il basso, in base al valore (n_filgli) sai se ti trovi su un livello oppure sei sceso a livello+1.
La struttura dati che puoi usare è quella del figlio_sx, fratello_dx, ma non è detto che tu debba distinguerli, visto che non ha nessuna importanta, quindi un nodo avrà una lista concatenata di n figli. Struct nodo { char* name; struct nodo* figli struct nodo* next char** proprieta (tassonomia) } Codice:
n_figli radice
n_figli figlio_1
" figlio_2
" figlio_1 (di figlio_2)
" figlio_2 (di figlio_2)
figlio_1 (di figlio_2 di figlio_2)
figlio_3 (di figlio_2)
figlio_3
figlio_4
figlio_5
figlio_1 (di figlio_5)
figlio_2 (di figlio_5)
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Non mi e' ancora chiaro com'e' il file dei dati.
Perche' non ne posti un pezzetto, giusto per capire cosa si deve leggere? Il resto non mi pare difficile, per esempio: Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct albero {
char nome[5];
struct albero *fratello;
struct albero *figlio;
} alberoStrano;
typedef struct famiglia {
char *nome;
int figli;
} famiglia;
famiglia dati[] = {
{"1", 5}, {"11",0}, {"12",3}, {"121",0}, {"122",1},
{"1221",0}, {"123",0}, {"13",0}, {"14",0},{"15",2},
{"151",0},{"152",0},{NULL,0}
};
int indice;
void leggiNodo(famiglia *dati, alberoStrano **nodo, int fratelli)
{
int figli;
if (dati[indice].nome == NULL)
return;
*nodo = malloc(sizeof(alberoStrano));
strcpy((*nodo)->nome, dati[indice].nome);
figli = dati[indice++].figli;
if (figli > 0) {
leggiNodo(dati, &((*nodo)->figlio), figli-1);
} else
(*nodo)->figlio = NULL;
if (fratelli > 0)
leggiNodo(dati, &((*nodo)->fratello), fratelli-1);
else
(*nodo)->fratello = NULL;
}
void stampaNodo(alberoStrano *nodo)
{
printf("%s", nodo->nome);
if (nodo->figlio) {
printf(" (");
stampaNodo(nodo->figlio);
putchar(')');
}
if (nodo->fratello) {
putchar(' ');
stampaNodo(nodo->fratello);
}
}
int main()
{
alberoStrano *radice;
indice = 0;
leggiNodo(dati, &radice, 0);
stampaNodo(radice);
putchar('\n');
/* qui si dovrebbero liberare le risorse allocate,
ma lo lascio come esercizio ;) */
return 0;
}
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1451
|
Quote:
P.s Ma perchè un albero n-ario è strano?
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#18 | ||
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Quote:
"ad esempio:", ci sono solo alcune righe vuote. Quote:
ha esattamente n figli. E' un albero ordinato, che puo' essere visto come un albero binario organizzato in modo particolare (da qui lo strano). |
||
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1451
|
Quote:
Comunque era un rtf, l'ho rinominato.
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#20 | ||
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Quote:
Comunque ...basta capirsi. Quote:
![]() Pero', da quello che leggo, il secondo quesito richiede la costruzione del TFILE, quindi sei TU che mi devi dire come e' fatto... |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:15.






















