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 / DoderoG / C_files / coda.c < prev    next >
Text File  |  1996-11-03  |  2KB  |  84 lines

  1. /*program  coda (input,output);*/
  2. #define maxint 1000000000
  3. #define max 10
  4. typedef int element;
  5. typedef struct lista  * plista;
  6. typedef struct lista {
  7.                      element i;
  8.                      plista n;
  9.                      plista pr;
  10.                      };
  11. typedef struct coda {
  12.                     plista head, sentinel, tail;
  13.                     };
  14.  struct coda s;
  15.  element x;
  16.  int i,n;
  17.  
  18. /*-----------coda----------*/
  19.  
  20. init ( p)
  21. struct coda *p;
  22. {
  23.     p->head = (plista ) malloc (sizeof (struct lista));
  24.     p->sentinel = (plista) malloc (sizeof (struct lista));
  25.     p->tail = p->head;
  26.     p->head->n=p->sentinel;
  27.     p->sentinel->pr=p->head;
  28. } /*init*/
  29.  
  30. enqueue(p,e )
  31. struct coda *p;
  32. element e;
  33. { plista q;
  34.     q = (plista) malloc (sizeof (struct lista));
  35.     q->i = e;
  36.     q->n = p->head->n;
  37.     q->pr = q->n->pr;
  38.     q->n->pr = q;
  39.     p->tail = p->sentinel->pr;
  40.     p->head->n=q;
  41. } /*enqueue*/
  42.  
  43. element dequeue (p)
  44. struct coda *p;
  45. { plista q;
  46.   element d;
  47.     d = maxint;
  48.     if (p->tail != p->head)
  49.     { d = p->tail->i;
  50.       q = p->tail;
  51.       p->tail = p->tail->pr;
  52.      }
  53.    return (d);
  54.  } /*dequeue*/
  55.  
  56. is_empty(p)
  57. struct coda *p;
  58. {
  59.    return(p->head == p->tail);
  60. }
  61.  
  62. /*-------------------------*/
  63.  
  64. main ()
  65. {
  66.    init (&s);
  67.    printf("quanti??"); 
  68.    scanf("%d",&n);
  69.    i = n;
  70.    while (i--)
  71.    {  scanf("%d",&x);
  72.       /* printf("ho letto: %d\n", x);*/
  73.       enqueue (&s,x);
  74.    }
  75.    printf ("stampa diritti\n");
  76.    i = n;
  77.    while (i--)
  78.    {   x = dequeue(&s);
  79.        printf("%d\n",x);
  80.    }
  81.    printf("fine\n");
  82.  
  83. }
  84.