Zeppelmore

Esercizio liste lineari

Jul 2nd, 2012
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.90 KB | None | 0 0
  1. // Creare un menu che dia la scelta di inserire dati (nome , comgnome , CF ) tramite liste linerari , ovviamente con memoria dinamica
  2. // Dia anche la possibilità di visualizzare tutti i dati inseriti
  3.  
  4. #include <stdio.h>
  5. #include <malloc.h>
  6.  
  7. #define ERRORE printf ("\nSi è inserito un dato errato , ERRORE ... \nInserire nuovamente")
  8. #define NEWLINE printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
  9. #define PAUSA scanf ("%c" , &pausa)
  10.  
  11. struct persona {
  12.  char nome [30];
  13.  char cognome [30];
  14.  char cf [17];
  15.  struct persona *link;
  16. };
  17.  
  18. // dichiarazioni delle funzioni in uso nel programma
  19. struct persona *creaLista ( void );
  20. struct persona *creaLista2 ( struct persona * );
  21. void visualizza ( struct persona * );
  22.  
  23. int main ()
  24. { // inizio della funzione main principale
  25.  
  26. int scelta;
  27. char pausa;
  28. int flag = 0 ;  // flag = 0 se ancora non sono stati creati elementi , flag > 0 se gia esiste il puntatore alla testa
  29. struct persona *puntLista; // puntatore alla testa
  30. struct persona *puntSeguenti; // puntatore degli elementi seguenti
  31.  
  32.  
  33.  do
  34.  { // inizio del ciclo do while che fsa riprodurre il menu
  35.  
  36.  printf ("1)Inserisci dati persona");
  37.  printf ("\n2)Visualizza dati persona");
  38.  printf ("\n\n\n0)Fine");
  39.  scanf ("%d" , &scelta);
  40.  
  41.  switch ( scelta )
  42.  {
  43.         case 1 : if ( flag == 0 ) {  // il flag concide con 0 se stiamo inserendo il primo elemento
  44.                  puntLista = creaLista ();
  45.                  flag++;
  46.                  puntSeguenti = puntLista; }  // assegnamo il puntatore alla testa al puntSeguenti per non perdere la testa
  47.                  
  48.                  else if ( flag == 1 )
  49.                  puntSeguenti = creaLista2 ( puntSeguenti);
  50.         break;
  51.         case 2 : visualizza ( puntLista );
  52.                  PAUSA;
  53.                  PAUSA;
  54.                  break;
  55.         case 0 : NEWLINE;
  56.                  printf ("Grazie per aver usato questo programma.\nArrivederci !!! ");
  57.                  scanf ("%c" , &pausa);
  58.                  scanf ("%c" , &pausa);
  59.                  break;
  60.         default :  NEWLINE;
  61.                 ERRORE;
  62.                 PAUSA;
  63.                 PAUSA;
  64.                 break;
  65.                 } // fine menu switch - case
  66.                 NEWLINE;
  67.                 } // fine ciclo do - while che fa riprodurre il menu
  68.                 while ( scelta != 0 );
  69.                
  70.                 } // fine del main principale
  71.  
  72.  
  73. // Definizione delle funzioni in uso nel seguente programma
  74.  
  75. // definizione della funzione Crea lista ( crea il primo elemento della lista )
  76. struct persona *creaLista ( void )
  77. {
  78.        struct persona *p ; // creiamo il puntatore alla testa
  79.        struct persona *paus; // creiamo il puntatore dei successivi elementi
  80.  
  81.        
  82.        NEWLINE;
  83.        
  84.        // creazione del primo elemento
  85.        p = ( struct persona * ) malloc ( sizeof ( struct persona ) ) ;
  86.  
  87.        
  88.        printf ("Inserire il nome : ");
  89.        scanf ("%s" , p->nome);
  90.        
  91.  
  92.        printf ("Inserire il cognome : \t " );
  93.        scanf ("%s" , p->cognome );
  94.  
  95.        
  96.        printf ("Inseirire il codice fiscale : \t " );
  97.        scanf ("%s" , p->cf);
  98.        
  99.        // Creaiamo il 2 elemento che momentaneante punta a null
  100.        paus = p;
  101.        paus->link = (struct persona *)malloc (sizeof ( struct persona ) );
  102.        paus->link = NULL;
  103.  
  104.        
  105. return (p);
  106. } // fine della funzione crea Lista
  107.  
  108. // Definizione della funzione crea lista 2 ( tutti gli elementi successivi )
  109. struct persona *creaLista2 ( struct persona *paus )
  110. {
  111.        // Quando mandiamo in esecuzione questa funzione gia l'elemento successivo è stato creato e concide con NULL
  112.        // Quindi riempiamo la struttura e creiamo un nuovo puntatore NULL
  113.        
  114.        NEWLINE;
  115.  
  116.        paus = paus->link;
  117.  
  118.        paus = (struct persona *)malloc ( sizeof ( struct persona) ) ;
  119.      
  120.        printf ("Inserire il nome : ");
  121.        scanf ("%s" , paus->nome);
  122.        
  123.  
  124.        printf ("Inserire il cognome : \t " );
  125.        scanf ("%s" , paus->cognome );
  126.  
  127.        
  128.        printf ("Inseirire il codice fiscale : \t " );
  129.        scanf ("%s" , paus->cf);
  130.        
  131.        // creaimo lo spazio successivo e lo inizializziamo a NULL
  132.        paus->link = (struct persona *)malloc ( sizeof ( struct persona) ) ;
  133.        paus->link = NULL;
  134.  
  135.        
  136.        return (paus);
  137.        } // fine della definizione della funzione creaLista2
  138. // Definizione della funzione visualizza
  139. void visualizza ( struct persona *p)
  140. {
  141.      int i ;
  142.      
  143.      NEWLINE;
  144.      for ( i = 1 ; p != NULL ; i++)
  145.      {
  146.          printf ("___________________________________________________________________________\n\t\tDati %d° persona : " , i);
  147.          printf ("\n\nNome : \t\t\t %s " , p->nome );
  148.          printf ("\nCognome : \t\t %s " , p->cognome);
  149.          printf ("\nCodice Fiscale : \t %s " , p->cf);
  150.  
  151.          p = p->link;
  152.          
  153.          }
  154.          }
Advertisement
Add Comment
Please, Sign In to add comment