#include <stdio.h>
#include <malloc.h>
struct agricoltore {
int inf;
struct agricoltore *pun;
};
void gestione_lista(void);
struct agricoltore *inserimento(struct agricoltore *);
struct agricoltore *eliminazione(struct agricoltore *);
void visualizzazione(struct agricoltore *);
main() {
gestione_lista();
}
void gestione_lista(void) {
struct agricoltore *punt_lista = NULL;
int scelta = -1;
char pausa;
while(scelta!=0) {
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t*********GESTIONE DEL PONTE***********\n");
printf("\n\n\n\t\t\t 1. Per inserire un agricoltore");
printf("\n\n\t\t\t 2. Per eliminare un agricoltore");
printf("\n\n\t\t\t 3. Per visualizzare la coda");
printf("\n\n\t\t\t 0. Per finire");
printf("\n\n\n\t\t\t\t Scegliere una opzione: ");
scanf("%d", &scelta);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
switch(scelta) {
case 1: punt_lista = inserimento(punt_lista);
break;
case 2: punt_lista = eliminazione(punt_lista);
break;
case 3: visualizzazione(punt_lista);
printf("\n\nQualsiasi tasto per continuare...");
scanf("%c%c", &pausa, &pausa);
break;
}
}
}
/* Visualizzazione della lista */
void visualizzazione(struct agricoltore *p) {
struct agricoltore *paus = p;
printf("*****LEGENDA*****\n 0 - villaggio nord \n 1 - villaggio sud\n ");
printf("\npunt_lista---> ");
while(paus!=NULL) {
printf("%d---> ", paus->inf);
paus = paus->pun; }
printf("NULL");
}
/* Inserimento del valore passato dall'utente nella lista mantenendo l'ordinamento */
struct agricoltore *inserimento(struct agricoltore *p) {
struct agricoltore *p0, *p1;
int n,posizione;
/* Creazione agricoltore */
p0 = (struct agricoltore *)malloc(sizeof(struct agricoltore));
do { printf("\nInserisci il villaggio di appartenenza\n 0 - villaggio nord \n 1 - villaggio sud\n");
scanf("%d", &n);
} while(n>1);
p0->inf = n;
if(p==NULL) {
/* Se la lista è vuota, l'agricoltore */
p = p0; /* diventa il primo e unico della lista */
p->pun = NULL; }
else {
if(p->inf > p0->inf) {
/* Se il valore dell'agricoltore è */
p0->pun = p; /* inferiore al primo l'agricoltore */
p = p0; /* diventa il primo della lista */
}
else { /* Ricerca della posizione di inserimento */
p1 = p; posizione = 0;
while(p1->pun!=NULL && posizione!=1) {
if(p1->pun->inf < p0->inf) p1 = p1->pun;
/* Scorre in avanti p1 */
else posizione = 1; /* Interrompe lo scorrimento */
}
p0->pun = p1->pun; /* Connessione all'agricoltore successivo */
p1->pun = p0; /* Connessione dall'agricoltore precedente */
}
}
return(p); /* Ritorno del puntatore all'inizio della lista */
}
/* Eliminazione dell'agricoltore richiesto dalla lista ordinata */
struct agricoltore *eliminazione(struct agricoltore *p) {
struct agricoltore *paus = p;
struct agricoltore *p1 = p, *p2;
struct agricoltore e;
int posizione = 0;
char pausa;
printf("*****LEGENDA*****\n 0 - villaggio nord \n 1 - villaggio sud\n ");
printf("\npunt_lista---> ");
while(paus!=NULL) {
printf("%d---> ", paus->inf);
paus = paus->pun; }
printf("NULL");
printf("\n\n\nQuale agricoltore vuoi fare passare?\n ");
scanf("%d", &e.inf);
if(p1!=NULL) {
/* Se la lista è vuota fine */
if(p1->inf == e.inf) {
/* Se è il primo da eliminare */
p2 = p1; p = p->pun;
/* si modifica il puntatore alla testa */
free(p2);
return(p);
}
else { /* Ricerca dell'agricoltore da eliminare */
while(p1->pun!=NULL && posizione!=1) {
if(p1->pun->inf!=e.inf) p1 = p1->pun; /* Scorre in avanti p1 */
else { posizione = 1; /* Interrompe lo scorrimento */
p2 = p1->pun; p1->pun = p1->pun->pun; /* Eliminazione agricoltore */
free(p2); /* Libera la memoria */
return( p );
}
}
}
}
if(!posizione) {
printf("\nElemento non incontrato nella lista ");
scanf("%c%c", &pausa, &pausa);
}
return(p);
}