Esempio di struttura ad albero
Sviluppato da Marco Arrighini e Andrea Curcio.

Quello che segue è un semplice esempio di programma con implementata una struttura ad albero. Ció che il programma esegue è una lettura da file (in questo caso l´intera Divina Commedia di Dante), salva le parole (intese come caratteri tra uno spazio e il successivo) in un albero ordinato e scorre l´albero per cercare l'occorenza di una parola data (in questo caso Dio).



#include <stdio.h>
#include <string.h>

typedef struct parola {
   char nome[100];
   struct parola *left, *right;
} Parola, *PtrParola;

PtrParola cercaParola (Parola*, char*);
PtrParola aggiungiNodo (PtrParola , Parola);


int main(int argc, char *argv[]) {

   Parola *radice = NULL;
   FILE* fn;
   char *azione;
   char nome_cercato[] = "Dio";
   long int ti=0, tf=0, tfr=0;
   ti = time();

   if ((fn = fopen("Commedia.txt","r")) != NULL) {
      char querys_temp[400];
      Parola temp;
      while (fscanf(fn, "%s", querys_temp) != EOF) {
         strcpy(temp.nome, querys_temp);
         temp.left = NULL;
         temp.right = NULL;

         radice = aggiungiNodo (radice, temp);
      }
   }
   tf = time();
   fclose(fn);
   if (argc != 1) {
      Parola *p = radice, *t = NULL;
      int trovato = 0;

      while ((t = cercaParola(p, nome_cercato)) != NULL) {
         p = t->right;
         trovato++;
       }
      printf("%d", trovato);
   }
   tfr = time();
   printf("Prima parte: %d\nRicerca: %d\nCompleto: %d", tf-ti, tfr-tf, tfr-ti);
}

PtrParola cercaParola(PtrParola ptr, char *nome){
   if(ptr == NULL)
      return NULL;
   if (strcmp(nome, ptr->nome) < 0)
      return(cercaParola(ptr->left, nome));
   else
      if(strcmp(nome, ptr->nome) > 0)
         return(cercaParola(ptr->right, nome));
      else
         return (ptr);
}

PtrParola aggiungiNodo (PtrParola ptr, Parola temp){

   if (ptr == NULL){
      ptr = (PtrParola) malloc(sizeof(Parola));
      *ptr = temp;
      ptr->left = ptr->right = NULL;
   }else{
      if(strcmp(temp.nome, ptr->nome)<0)
         ptr->left = aggiungiNodo(ptr->left, temp);
      else
         ptr->right = aggiungiNodo(ptr->right, temp);
   }
   return ptr;
}





Questa applicazione è stata sviluppato nel corso di Laboratorio di Informatica presso l´Università degli Studi di Brescia, Facoltà di Ingegneria dell´Informazione.

Salvo diversa indicazione, i codici sorgente sono stati scritti da Marco Arrighini e da Andrea Curcio.