ho provato ad inserire il file in lista ma ha impiegato 1h e 25 min per effettuare l'inserimento. Ti posto il codice che ho usato. A meno che non ho commesso qualche errore che rallenta l'esecuzione non credo sia il metodo migliore da usare. Con il file sequenziale, anche se non riesco ad ordinarlo, è errato?
Codice PHP:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct lista{
char stringa[30];
struct lista *pun;
};
/* dichiarazione delle funzioni */
void letturaFile(FILE *, struct lista **);
void inserimento(struct lista **, char *);
void stampaLista(struct lista *);
main() {
FILE *f;
struct lista *p = NULL;
letturaFile(f, &p);
stampaLista(p);
system("PAUSE");
return 0;
}
/* definizione funzioni */
void letturaFile(FILE *f, struct lista **p)
{
char parola[20];
if(( f = fopen("zingarelli2005.txt", "r")) == NULL)
printf("Impossibile aprire il file\n");
else{
while(!feof(f)){
fscanf(f, "%s", parola);
inserimento(p, parola);
}
}
fclose(f);
}
void inserimento(struct lista **p, char *value)
{
struct lista *p0, *p1, *p2;
p0=(struct lista *)malloc(sizeof(struct lista));
if(p0 != NULL){
strcpy(p0->stringa, value);
p0->pun = NULL;
p1 = NULL;
p2 = *p;
while(p2 != NULL && strcmp(value, p2->stringa) > 0){
p1 = p2;
p2 = p2->pun;
}
if(p1 == NULL){
p0->pun = *p;
*p = p0;
}
else{
p1->pun = p0;
p0->pun = p2;
}
}
else
printf("%s nn inserito. Memoria nn disponibile\n");
}
void stampaLista(struct lista *p2)
{
if(p2 == NULL)
printf("la lista e' vuota\n");
else{
printf("la lista e':\n");
while(p2 != NULL){
printf("%s\n", p2->stringa);
p2 = p2->pun; }
printf("NULL\n\n");
}
}