Esempio di struttura a lista
Sviluppato da Marco Arrighini e Andrea Curcio.

Quello che segue è un semplice esempio di programma con implementata una struttura a lista. 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 una lista ordinata e scorre la lista per cercare l'occorenza di una parola data (in questo caso Dio).



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

typedef struct parola {
   char nome[40];
   struct parola * next;
} Parola;

Parola * cerca (Parola*, char[]);

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

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

   if ((fn = fopen("Commedia.txt","r")) != NULL) {
      char querys_temp[40];
      Parola temp, *p, *pt_temp, *q;
      while (fscanf(fn, "%s", querys_temp) != EOF) {
         strcpy(temp.nome, querys_temp);
         temp.next = NULL;

         pt_temp = (struct parola *) malloc(sizeof(temp));
         if (pt_temp != NULL) *pt_temp = temp;


         q=NULL;
         for(p = testa; (p != NULL) && (strcmp(p->nome, temp.nome) < 0); p = p->next)
             q = p;
         if ((p == NULL) || (strcmp(p->nome, temp.nome) >= 0)) {
             pt_temp->next = p;
             if (q == NULL)
                testa = pt_temp;
            else
               q->next=pt_temp;
         }
       }
   }
   tf = time();
   fclose(fn);

   if (argc != 1) {
      Parola *p = testa, *t = NULL;
      int trovato = 0;
      while ((t = cerca (p, nome_cercato)) != NULL) {
         trovato++;
      p = t->next;
      }
      printf("%d\n", trovato);
   }
   tfr = time();
   printf("Prima parte: %d\nRicerca: %d\nCompleto: %d", tf-ti, tfr-tf, tfr-ti);
}

Parola * cerca (Parola *testa, char nome[]) {
   Parola *p;

   for (p=testa; (p != NULL) && (strcmp(p->nome, nome) < 0); p = p->next);
   if (p != NULL && strcmp(p->nome, nome) == 0) return p;
   else return NULL;
}





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.