La lista è qui
#define MAXLN 40
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct listanomi{
char nome[MAXLN];
struct listanomi *successivo;
};
typedef struct listanomi Listanomi; /* definisce Listanomi come nuovo nome
* del tipo dati struct listanomi */
Listanomi *inizio=NULL; /* "inizio" e' il puntatore all' inizio della
lista inizializzato a NULL */
Listanomi *crea_elemento( void )
/* alloca memoria per un nuovo elemento ritornando un puntatore a questo spazio */
/* N.B. la creazione di un nuovo elemento NON lo inserisce nella lista:
* nessun elemento punta ancora al nuovo e questo non punta a nessuno
* p->successivo punta a NULL */
{
Listanomi *p;
p = malloc(sizeof(Listanomi) );
if ( p == NULL )
{
printf( "crea_elemento: malloc failed \n");
exit(1);
}
p->successivo = NULL;
return p;
}
void aggiungi_elemento( Listanomi *e )
/* questa function aggiunge un elemento del tipo Listanomi alla lista
* di primo elemento "inizio" */
{
Listanomi *p;
if ( inizio == NULL)
{
inizio = e;
return;
}
for( p = inizio; p->successivo != NULL; p = p->successivo)
;
p->successivo = e;
return;
}
void inserisci_dopo(Listanomi *q, Listanomi *p)
/* inserisce l' elemento p dopo q nella lista */
{
if ( p == NULL || q == NULL || p==q || q->successivo == p )
{
printf("inserisci_dopo : inserzione non valida\n");
return;
}
p->successivo = q->successivo;
q->successivo = p;
return;
}
void elimina(Listanomi *eliminando)
{
Listanomi *p;
if (eliminando == inizio)
inizio = eliminando->successivo;
else
{
for(p=inizio; (p!= NULL) && (p->successivo !=eliminando);p = p->successivo)
if ( p == NULL)
{
printf("elimina: Errrore: non c'e' l' elemento cercato nella lista \n");
return;
}
p->successivo = p->successivo->successivo;
}
free(eliminando);
}
void scrivi_lista(void)
{
Listanomi *p;
int count=0;
if(inizio == NULL) printf("lista vuota\n");
else {
p=inizio;
do{count++;
printf("%s\n",p->nome);
p= p->successivo;
}
while(p != NULL);
}
printf("%d elementi\n",count);
return;
}
Listanomi *trova_nome( char *nome )
{
Listanomi *p;
p=inizio;
do{
if(strcmp(nome,p->nome)==0) return p;
}while((p=p->successivo) != NULL);
return NULL;
}
int main()
{
char ans, buffer[80];
Listanomi *p;
int non_trovato;
p=inizio;
while(1)
{
printf(" new element ? (y/n) ");
fgets(buffer,80,stdin);
buffer[strlen(buffer)-1]='\0';
sscanf(buffer,"%c",&ans);
if(ans == 'n') break;
p=crea_elemento();
fgets(buffer,80,stdin);
buffer[strlen(buffer)-1]='\0';
sscanf(buffer,"%40s",p->nome);
aggiungi_elemento(p);
}
do{
scrivi_lista();
printf(" quale vuoi eliminare ? ");
scanf("%s",buffer);
if((p=trova_nome(buffer)) != NULL)
{
printf("Trovato ! : %s \n",p->nome);
non_trovato=0;
elimina(p);
scrivi_lista();
}
else
{
printf("Elemento non trovato. Riprova\n");
non_trovato=1;
}
} while(non_trovato);
return 0;
}