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.00 / turno4 / parte1.c next >
C/C++ Source or Header  |  2000-06-20  |  1KB  |  87 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct cell* set;
  5.  
  6. struct cell{
  7.     float info;
  8.     set next;
  9. };
  10.  
  11.  
  12. set empty(void);
  13. void insert(float,set *);
  14. void print(set);
  15.  
  16.  
  17. void main ()
  18. {
  19.     float c;
  20.     char fname[20];
  21.     set s=empty();
  22.     FILE *fp=NULL;
  23.     printf ("Inserisci il nome del file di input: ");
  24.     scanf ("%s",fname);
  25.     if (fp=fopen(fname, "r"))
  26.     {
  27.         while ((fscanf(fp, "%f",&c)) && (c!=0))
  28.             insert (c, &s);
  29.     }
  30.     else 
  31.        {
  32.         printf("\nErrore nell'apertura del file!\n");
  33.         exit(EXIT_FAILURE);
  34.         }
  35.         
  36.      printf ("Insieme:\n");
  37.      print (s);
  38.      fclose (fp);    
  39. }
  40.  
  41.  
  42. set empty()
  43. {
  44.     return NULL;
  45. }
  46.  
  47. void insert (float x, set *s)
  48. {
  49.     set prec=NULL;
  50.     set corr=*s;
  51.     set aux;
  52.     aux=(set) malloc (sizeof(struct cell));
  53.     aux->info=x;
  54.     aux->next=NULL;
  55.     
  56.     while((corr!=NULL) && (x<corr->info))
  57.     {
  58.         prec=corr;
  59.         corr=corr->next;
  60.     }
  61.     
  62.     if ((prec==NULL)&&(corr==NULL || x!=corr->info)) /*inserimento  in testa */
  63.     {
  64.         aux->next=*s;
  65.         *s=aux;
  66.     }
  67.     else if (corr==NULL) /* inserimento in coda */
  68.     {
  69.         prec->next=aux;
  70.         return;
  71.     }
  72.     else if (x!=corr->info) /* inserimento in mezzo */
  73.     {
  74.         prec->next=aux;
  75.         aux->next=corr;
  76.     }
  77. }
  78.  
  79.  
  80.  
  81. void print (set s)
  82. {
  83.     for (; s!=NULL; s=s->next)
  84.         printf ("%.2f\t",s->info);
  85.     printf("\n\n");    
  86. }
  87.