Devo lavorare con un abr di nome symtab i cui nodi fatti in questo modo:
Dovrei farmi le funzioni di inserimento e di ricerca di un'elemento (ricercato tramite char ID quindi gli elementi sono messi in ordine in base a quella stringa)codice:typedef struct symtab_node { char ID; boolean inizializzata; struct symtab_node* SX; struct symtab_node* DX; }symtab_node; typedef symtab_node* symtab;
L'inserimento non da problemi ma non so se funziona veramente(la prima funzione è di appoggio alla seconda che è la vera funzione di inserimento):
Ma la ricerca di un elemento per dire se esiste o per aggiornare la variabile booleana inizializzata come si potrebbe fare. L'algoritmo da seguire è quello dell'inserimento?codice:static void symtabins(symtab_node** new,char *nome){ if(new != NULL){ *new = ( symtab_node *) malloc( sizeof(symtab_node)); assert(*new != NULL); strcpy(&(*new)->ID,nome); (*new)->inizializzata == FALSE; (*new)->DX = NULL; (*new)->SX = NULL; } } void symtab_init() { radice = NULL; } void symtab_aggiungi(char *nome){ if( radice == NULL ){ symtabins(&radice,nome); } else if(radice != NULL ){ symtab_node* tmp = radice; int i; while( TRUE ){ i = strcmp(&tmp->ID,nome); if( i == 0) return; else if( i == -1 ){ if( tmp->SX != NULL) tmp = tmp->SX; else symtabins( &(tmp->SX),nome ); } else if( i == 1 ){ if( tmp->DX != NULL) tmp = tmp->DX; else symtabins( &(tmp->DX),nome ); } } } }

Rispondi quotando