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.01 / turno2 / parte3.c < prev    next >
C/C++ Source or Header  |  2001-09-04  |  2KB  |  169 lines

  1. /*PARODI SILVANO */
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6.  
  7. /*STRUTTURE DATI*/
  8.  
  9. typedef struct cella *coda;
  10. struct cella{
  11.                      int info;  
  12.                      coda next; 
  13.                     }; 
  14.  
  15.  
  16. /*PROTOTIPI*/
  17.  
  18. coda empty();
  19. coda enqueue(coda s, int n);
  20. coda dequeue(coda s,int *n);
  21. coda dequeue_k(coda *s,int k);
  22. void print(coda s);
  23.  
  24. /*MAIN*/
  25.  
  26. void main()
  27. {
  28.  char nome[20];  
  29.  FILE *fp=NULL;
  30.  coda lista, newcoda;  
  31.  int numero, kappa;
  32.  
  33.  lista = empty();
  34.  
  35.  printf("\nInserire il nome del file: ");
  36.  scanf("%s",nome);
  37.  
  38.  if (fp = fopen(nome, "r"))
  39.   {
  40.    while ((fscanf(fp,"%d",&numero)) && (numero != -1))
  41.       lista = enqueue ( lista, numero); 
  42.    fclose(fp); 
  43.   }
  44.  else printf("\nErrore lettura file");
  45.  printf("\nEcco la coda: ");
  46.  print (lista);
  47.  
  48.  printf("\nInserire il valore di k: ");
  49.  scanf("%d", &kappa);
  50.  
  51.  
  52.  newcoda = dequeue_k(&lista,kappa);
  53.  
  54.  printf("\n La nuova coda e': \n");
  55.  print(newcoda); 
  56.  printf("\n La vecchia coda e': \n");
  57.  print(lista); 
  58.  
  59. }
  60.  
  61.  
  62. /*CORPO FUNZIONI*/
  63.  
  64. coda empty()
  65. {
  66.  return NULL;
  67. }
  68.  
  69.  
  70. coda enqueue(coda s, int n)
  71. {
  72.  coda aux; 
  73.  if (s==NULL)
  74.   {
  75.    aux = (coda)malloc(sizeof(struct cella));  
  76.    aux->info = n;
  77.    aux->next = NULL;
  78.    return aux;
  79.   }
  80.  else
  81.   {
  82.    aux = (coda)malloc(sizeof(struct cella));  
  83.    aux->info = n;
  84.    aux->next = s;   
  85.    return aux;
  86.   }
  87. }
  88.  
  89.  
  90.  
  91.  
  92. coda dequeue(coda s,int *n)
  93. {
  94.  coda prec1,prec2 , corr;
  95.  
  96.  if(s!=NULL)
  97.   { 
  98.    prec2 = NULL;
  99.    prec1 = NULL;
  100.    corr = s;
  101.  
  102.    while (corr != NULL)
  103.     {
  104.      prec2 = prec1;
  105.      prec1 = corr; 
  106.      corr = corr -> next;
  107.     }  
  108.    if ( prec2 == NULL )
  109.      { 
  110.       *n = prec1->info;
  111.       free(prec1);
  112.       s = NULL; 
  113.       return s;
  114.      }
  115.    else   
  116.      {
  117.       *n = prec1->info;
  118.       prec2->next = NULL;
  119.       free(prec1);
  120.       return s;
  121.      }
  122.   } 
  123.  else
  124.   {
  125.    *n = -1;
  126.    return s;
  127.   }
  128. }
  129.  
  130.  
  131. coda dequeue_k(coda *s,int k)
  132.  coda corr, nuovacoda = empty();
  133.  int i = 0, n, num;
  134.  corr = *s;
  135.  while (corr!= NULL)
  136.   {
  137.    i++;                   /*calcolo la lunghezza della lista*/
  138.    corr = corr-> next;
  139.   }
  140.  
  141.  
  142.  if (k > i) return NULL; 
  143.  else
  144.   {
  145.    for (n = 0; n < k; n++)
  146.      {
  147.       *s = dequeue(*s, &num);
  148.       nuovacoda = enqueue(nuovacoda, num);
  149.      }  
  150.    return nuovacoda;
  151.   } 
  152. }
  153.  
  154.  
  155.  
  156.  
  157. void print(coda s)
  158.  printf("\n ");
  159.  
  160.  while ( s != NULL)
  161.   {
  162.    printf(" %d  ",s->info);
  163.    s = s -> next;
  164.   }
  165. }
  166.  
  167.