Devo lavorare con un abr di nome symtab i cui nodi fatti in questo modo:
codice:
typedef struct symtab_node
{
char ID;
boolean inizializzata;
struct symtab_node* SX;
struct symtab_node* DX;
}symtab_node;
typedef symtab_node* symtab;
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)
L'inserimento non da problemi ma non so se funziona veramente(la prima funzione è di appoggio alla seconda che è la vera funzione di 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 );
}
}
}
}
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?