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.