home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / testi-esami / labo-6.99 / turno1 / parte1.c < prev    next >
C/C++ Source or Header  |  1999-06-16  |  1KB  |  96 lines

  1. /* Una possibile soluzione Esame di Laboratorio di Algoritmi 15 giugno 1999
  2.  * Turno 1 */
  3.  
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #define MAX 20
  9.  
  10. /* definizione dei tipi */
  11.  
  12. typedef  struct stackel * stack;    /* uno stack  e' un puntatore */
  13. typedef  struct stackel{ int el; stack next; } stck;
  14.  
  15. /* operazioni sullo stack */ 
  16.  
  17. stack   empty(void);    /* restituisce uno stack vuoto, cioe' restituisce NULL */
  18. stack push(int,stack);   /* aggiunge in testa        */
  19. void  print(stack);      /* stampa lo stack */
  20. stack makestackel(void);     /* alloca una nuova cella */
  21.  
  22.  
  23. /* main */  
  24.  
  25. main()
  26. {
  27.   
  28.     FILE * fp;
  29.     char nome[MAX];
  30.     int n;
  31.     stack s;
  32.  
  33.   
  34.     /* creo stack vuoto */
  35.  
  36.     s = empty();
  37.  
  38.     /* leggo il nome del file */
  39.  
  40.     printf("Fornisci il nome del file: ");
  41.     scanf("%s", nome);
  42.  
  43.     /* apro il file in lettura */
  44.  
  45.     fp = fopen(nome,"r");
  46.  
  47.  
  48.     /* carico lo stack con i dati letti da file 
  49.      * (assumendo il file del formato corretto */
  50.  
  51.     while (fscanf(fp,"%d",&n) && n != -1)
  52.         s = push(n,s);
  53.  
  54.     /* stampo lo stack */
  55.  
  56.     print(s);
  57.  
  58. }
  59.  
  60.  
  61. /* funzioni */
  62.  
  63.  
  64. stack empty()
  65.  { 
  66.   return NULL;  
  67.  }
  68.  
  69.  
  70.  
  71. stack push(int el, stack s) 
  72.  { 
  73.    stack t;
  74.  
  75.    t=makestackel();      
  76.    t->el=el;
  77.    t->next=s;
  78.    return t; 
  79.  } 
  80.  
  81.  
  82.  
  83.  
  84.  
  85. stack makestackel(){ return (stack)malloc(sizeof(stck)); }
  86.  
  87.  
  88. void print(stack s) 
  89. {  
  90.     printf("\nLo stack ha il seguente contenuto: ");
  91.     for(; s !=NULL ; s = s -> next)
  92.        printf(" %d",s->el);
  93.     printf("\n\n");
  94.  } 
  95.  
  96.