/********************************************************* ********************* LISTE - GESTIONE ITERATIVA ********* **********************************************************/ #include #include struct nodo{ int info; struct nodo *punt;}; void gestionelista(void); struct nodo *inserimento(struct nodo *); struct nodo *eliminazione(struct nodo *); int testvuota(struct nodo *); void *visualizzazione(struct nodo *); main(){gestionelista();} /*________________GESTIONE_______________________________*/ void gestionelista(void) { struct nodo *punt_lista=NULL; int scelta=-1,OK; printf("\n\n\tGESTIONE DI UNA LISTA\n\n"); while (scelta){ printf("\n 1. Per inserire un elemento"); printf("\n 2. Per eliminare un elemento"); printf("\n 3. Per visualizzare"); printf("\n 0. Per terminare"); do{ printf("\n \n\n\n\tScegli un'opzione:"); OK=scanf("%d", &scelta); if(!OK)getchar();} while(!OK); 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\nBatti un tasto qualsiasi per continuare"); getchar();getchar();break; case 0: break; default:printf("\n\nOpzione inesistente\nBatti un tasto qualsiasi per continuare"); getchar();getchar(); break; }}} /*________________INSERIMENTO___________________________*/ struct nodo *inserimento(struct nodo *p){ struct nodo *p1=p, *p2; int posiz=0,OK; p2= (struct nodo*)malloc((int)sizeof(struct nodo));/*alloco memoria*/ do { printf("\n Dammi il numero da inserire:\n "); OK=scanf("%d",&p2->info); if(!OK)getchar();} while(!OK); if (testvuota(p)||(p->info > p2->info)){ p2->punt=p; p=p2;} /*elem da inserire in lista vuota o in prima posizione*/ else {posiz=0; /* inizio scorrimento */ while (p1->punt != NULL && posiz!=1){ if(p1->punt->infoinfo) p1=p1->punt; /* scorrimento */ else posiz=1;} /* fine scorrimento */ p2->punt=p1->punt; /* collego il successivo */ p1->punt=p2;} /* collego il precedente */ return(p); } /*________________ELIMINAZIONE__________________________*/ struct nodo *eliminazione(struct nodo *p){ struct nodo *p1=p, *p2; int num; int posiz=0; do printf("\n Dammi il numero da eliminare:\n "); while (scanf("%d",&num)==0); if(!testvuota(p1)){ /* lista vuota, nulla da eliminare*/ if(p1->info==num) {p2=p1; /* elemento da eliminare in prima posizione*/ p=p1->punt; /* elimino l'elemento*/ free(p2);return(p); } /* libero la memoria*/ else { /* cerco elemento da eliminare*/ while (p1->punt != NULL && posiz!=1){ if(p1->punt->info!=num) p1=p1->punt; /* scorrimento */ else { posiz=1; /* fine scorrimento */ p2=p1->punt; p1->punt=p1->punt->punt; /* elimino l'elemento*/ free(p2);return(p); /* libero la memoria*/ }}}} if(!posiz) {printf("\n\nElemento inesistente\nBatti un tasto qualsiasi per continuare"); getchar();getchar();} return(p);} /*_______________TESTVUOTA__________________________*/ int testvuota(struct nodo *p) {return(p==NULL);} /*________________VISUALIZZAZIONE_______________________*/ void *visualizzazione(struct nodo *p){ struct nodo *p1=p; printf("\n punt_lista--> "); while (!testvuota(p1)){ printf("%d --> ", p1->info); p1 = p1->punt;} printf("NULL\n");} /********************************************************** *********************** P I L E ************************ **********************************************************/ #include #include struct nodo{ int info; struct nodo *punt; }; void gestionepila(void); struct nodo *push(struct nodo *); struct nodo *pop(struct nodo *); int top(struct nodo *); int testvuota(struct nodo *); void *visualizzazione(struct nodo *); main(){gestionepila();} /*________________GESTIONE_______________________________*/ void gestionepila(void){ struct nodo *punt_lista=NULL; int scelta=-1,OK; printf("\n\n\tGESTIONE DI UNA PILA\n\n"); while (scelta){ printf("\n 1. Per fare push"); printf("\n 2. Per fare pop"); printf("\n 3. Per fare top"); printf("\n 4. Per visualizzare"); printf("\n 0. Per terminare"); do{ printf("\n \n\n\n\tScegli un'opzione:"); OK=scanf("%d", &scelta); if(!OK)getchar();} while(!OK); switch(scelta){ case 1: punt_lista=push(punt_lista);break; case 2: if(!testvuota(punt_lista)) punt_lista=pop(punt_lista); else printf("\nnon possumus\n");break; case 3: if (!testvuota(punt_lista)) printf("\nil top e' %d\n",top(punt_lista)); else printf("\nnon possumus\n"); break; case 4: visualizzazione(punt_lista); printf("\n\nBatti un tasto qualsiasi per continuare"); getchar();getchar();break; case 0: break; default:printf("\n\nOpzione inesistente\nBatti un tasto qualsiasi per continuare"); getchar();getchar(); break; }}} /*________________PUSH___________________________*/ struct nodo *push(struct nodo *p){ struct nodo *p1; int OK; p1= (struct nodo*)malloc((int)sizeof(struct nodo));/*alloco memoria*/ do { printf("\n Dammi il numero da inserire:\n "); OK=scanf("%d",&p1->info); if(!OK)getchar();} while(!OK); if (testvuota(p)){p=p1;p->punt=NULL;} /*elem da inserire in lista vuota */ else {p1->punt = p;p=p1;} return(p);} /*________________POP__________________________*/ struct nodo *pop(struct nodo *p){ struct nodo *p1=p; p=p->punt; /* elimino l'elemento*/ free(p1); /* libero la memoria */ return(p);} /*________________TOP__________________________*/ int top(struct nodo *p){return(p->info);} /*_______________TESTVUOTA__________________________*/ int testvuota(struct nodo *p) {return(p==NULL);} /*________________VISUALIZZAZIONE_______________________*/ void *visualizzazione(struct nodo *p){ struct nodo *p1=p; printf("\n punt_lista--> "); while (p1!=NULL){ printf("%d --> ", p1->info); p1 = p1->punt;} printf("NULL\n");} /********************************************************** ********************** C O D E ************************* **********************************************************/ #include #include struct nodo{ int info; struct nodo *punt;}; void gestionecoda(void); struct nodo *incoda(struct nodo *); struct nodo *outcoda(struct nodo *, int*); int testvuota(struct nodo *); void *visualizzazione(struct nodo *); main(){gestionecoda();} /* gestione di code con liste circolari */ /*________________GESTIONE_______________________________*/ void gestionecoda(void){ struct nodo *punt_lista=NULL; int scelta=-1; int elem,OK; printf("\n\n\tGESTIONE DI UNA CODA\n\n"); while (scelta){ printf("\n 1. Per fare incoda"); printf("\n 2. Per fare outcoda"); printf("\n 3. Per visualizzare"); printf("\n 0. Per terminare"); do{ printf("\n \n\n\n\tScegli un'opzione:"); OK=scanf("%d", &scelta); if(!OK)getchar();} while(!OK); switch(scelta){ case 1: punt_lista=incoda(punt_lista);break; case 2: if(!testvuota(punt_lista)){ punt_lista=outcoda(punt_lista,&elem); printf("\Ho estratto %d",elem);} else printf("\n Non possumus");break; case 3: visualizzazione(punt_lista); printf("\n\nBatti un tasto qualsiasi per continuare"); getchar();getchar();break; case 0: break; default:printf("\n\nOpzione inesistente\nBatti un tasto qualsiasi per continuare"); getchar();getchar(); break; }}} /*________________INCODA___________________________*/ struct nodo *incoda(struct nodo *p){ struct nodo *p1; int OK; p1= (struct nodo*)malloc((int)sizeof(struct nodo));/*alloco memoria*/ do { printf("\n Dammi il numero da inserire:\n "); OK=scanf("%d",&p1->info); if(!OK)getchar();} while(!OK); if (testvuota(p)){p=p1;p->punt=p;} /*elem da inser. in lista vuota */ else {p1->punt = p->punt; p->punt=p1; p=p1;} return(p);} /*________________OUTCODA__________________________*/ struct nodo *outcoda(struct nodo *p,int * elem) { struct nodo *p1; if(p==p->punt){ /* un solo elemento nella coda*/ *elem=p->info; free(p); return(NULL);} p1=p->punt; *elem=p1->info; p->punt=p1->punt; free(p1); /* tolgo un elemento dalla coda*/ return(p); } /*_______________TESTVUOTA__________________________*/ int testvuota(struct nodo *p) { return(p==NULL);} /*________________VISUALIZZAZIONE_______________________*/ void *visualizzazione(struct nodo *p){ struct nodo *p1=p->punt; printf("\n punt_lista--> "); if (!testvuota(p)){ while (p1!=p){ printf("%d --> ", p1->info); p1 = p1->punt; }printf("%d --> ", p1->info);}; printf("punt_lista\n"); }