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.