Finito,implementata anche l'eliminazione, voglio sapere cosa ne pensi
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct persona
{
char nome[20];
short eta;
struct persona *p_next;
}Persona;
void inserisci_campo(Persona ** );
void elimina_campo(Persona **, Persona ** , Persona ** , int , int );
void print_lista(Persona * );
void main ()
{
int i, op, menu=100, n, cont=0;
Persona *head, *punt, *pred;
head = NULL;
while (menu<=100)
{
puts("\n\n\n=======================");
puts("GESTIONE DI UNA LISTA");
puts("=======================\n\n");
puts("Selezionare l'operazione:\n");
puts("1=Visualizzare la lista");
puts("2=Inserire un elemento");
puts("3=eliminare un elemento");
scanf("%d",&op);
switch (op)
{
case 1 : print_lista(head); break;
case 2 : inserisci_campo(&head);
printf("Lista aggiornata:\n\n");
print_lista(head);
cont++; break;
case 3: printf("Selezionare il numero di nodo da eliminare:\n");
print_lista(head);
scanf("%d",&n);
punt=head;
for (i=0;i<n-1;i++){
pred=punt;
punt=punt->p_next;}
elimina_campo(&punt,&head,&pred,n,cont);
printf("Lista aggiornata:\n\n");
print_lista(head);
}
}
}
void inserisci_campo(Persona **head)
{
Persona *nuovo_campo;
nuovo_campo=calloc(1,sizeof(Persona));
if(nuovo_campo != NULL)
{
printf("Inserisci nome:\t");
scanf("%s",nuovo_campo->nome);
printf("inserisci eta\':\t");
scanf("%d",&nuovo_campo->eta);
nuovo_campo->p_next = NULL;
if(*head == NULL)
{
*head = nuovo_campo;
}
else
{
if(strcmp((*head)->nome,nuovo_campo->nome) > 0)
{
nuovo_campo->p_next = (*head);
(*head) = nuovo_campo;
}
else
{
Persona *ptr = *head;
while(ptr->p_next != NULL && (strcmp(ptr->p_next->nome,nuovo_campo->nome) < 0))
ptr = ptr->p_next;
nuovo_campo->p_next = ptr->p_next;
ptr->p_next = nuovo_campo;
}
}
}
else
{
printf("Memoria esurita\n");
}
}
void elimina_campo(Persona **p_punt, Persona **p_head, Persona **p_pred, int n, int cont)
{
if (n==1)
{
(*p_head)=(*p_head)->p_next;
}
else
{
if (n<cont)
{
(*p_pred)->p_next=(*p_punt)->p_next;
}
else
{
(*p_pred)->p_next=NULL;
}
}
}
void print_lista(Persona *pl)
{
int i=0;
printf("\n\n");
printf("lista:\n");
while (pl){
i++;
printf("%d=%s\t%d\n", i , pl->nome, pl->eta);
pl = pl->p_next;
}
printf("\n\n");
}