/* programma per la gestione di liste di punti */
#include <stdio.h> #include <stdlib.h>
typedef struct elemento { int ascissa; int ordinata; struct elemento *next; } punto;
punto* inserisci(punto *);
void stampa(punto *first);
punto *cancella(punto *first); int main(){ int scelta; punto *primo=NULL; //Puntatore al primo elemento, inizializzato a NULL do { printf("Scegli la tua opzione\n"); printf("1) Inserisci nuovo punto\n"); printf("2) Cancella ultimo punto\n"); printf("3) Stampa lista corrente dei punti\n"); printf("4) Termina programma\n"); scanf("%d",&scelta); switch(scelta){ case 1: primo=inserisci(primo); break; //Ins. nuovo punto in testa case 2: primo=cancella(primo);break; //cancella ultimo punto inserito case 3: stampa(primo); break; //stampa gli elementi correnti della lista case 4: break; default: printf("Scelta scorretta; inserisci nuovamente\n\n"); } } while (scelta!=4); printf("\nProgramma terminato correttamente\n"); return EXIT_SUCCESS; }
punto* inserisci(punto *first) { int asc,ord; punto *q; printf("\nInserisci le coordinate del nuovo punto\n"); printf("Ascissa="); scanf("%d",&asc); printf("\nOrdinata="); scanf("%d",&ord); q=(punto *)malloc(sizeof(punto)); //allocazione dinamica memoria if (q==NULL) { //verifico che l'allocazione abbia avuto successo printf("\nMemoria esaurita!\n"); return(first); } q->ascissa=asc; q->ordinata=ord; q->next=first; //inserimento in testa printf("Punto (%d,%d) inserito con successo.\n",q->ascissa,q->ordinata); return q; }
punto *cancella(punto *first) { punto *p; if (first==NULL) printf("\nNessun elemento nella lista.\n\n"); else { p=first->next; free(first); //deallocazione della memoria } return p; } void stampa(punto *first) { int cont=1; punto *q; if (first==NULL) printf("La lista Ë vuota.\n"); else for(q = first; q != NULL; q = q-> next) { printf("%d -- (%d,%d)\n",cont,q->ascissa,q->ordinata); cont++; }
|