Il codice proposto si occupa della creazione e dell'inserimento in una lista ordinata di nomi in cui implementerò anche la cancellazione in un secondo momento....
la cosa che non capisco è perchè nel primo ciclo for (quello in cui si deve inserire il nome della
persona)mi salta un ciclo e stampa a schermo solo i printf non richiamando le funzioni gets e insert!
codice:
#include<stdio.h> #include<stdlib.h> typedef struct nodo { char Nome[30]; struct nodo *Punt; }NODO; NODO *Insert(NODO *Old,char *Parola); void Visualizza(NODO *Lista); void Ricerca(NODO *Lista,char *Parola); main() { int a,i; char persona[30]; NODO *HEAD; HEAD=NULL; printf("quanti nomi?"); scanf("%d",&a); for(i=0;i<a;i++) { printf("\n inserisci il nome della persona\n"); gets(persona); HEAD=Insert(HEAD,persona); printf("\nciclo for\n"); } Visualizza(HEAD); printf("Chi vuoi eliminare ?\n"); gets(persona); system("pause"); Ricerca(HEAD,persona); printf("\n dopo eliminazione"); Visualizza(HEAD); system("pause"); } NODO *Insert(NODO *Old,char *Parola) { NODO *Nuovo; //equivale a OLD==NULL if(Old==NULL||((strcmp(Parola,Old->Nome)<1))) { Nuovo=(NODO *)malloc(sizeof(NODO)); strcpy(Nuovo->Nome,Parola); Nuovo->Punt=Old; Old=Nuovo; } else { Old->Punt=Insert(Old->Punt,Parola); } return Old; } void Visualizza(NODO *Lista) { if(Lista==NULL) printf("NULL\n"); else { printf("%s --->",Lista->Nome); Visualizza(Lista->Punt); } } void Ricerca(NODO *Lista,char *Parola) { NODO *app; if(Lista!=NULL) { if(strcmp(Parola,Lista->Nome)==0) { printf("parola trovata\n"); app=Lista->Punt; Lista=app; Visualizza(Lista); } else Ricerca(Lista->Punt,Parola); } else printf("parola non trovata e lista non modificata"); }