Esatto, avevo immaginato che intendessi una cosa del genere.
Povero cassiere! Oltre alle aperture domenicali, ora pure questa!
EDIT:
Ho un po' rivisto il codice e inserito anche la funzione per l'avanzamento della coda. Se interessa, lascio il codice:
#include <stdio.h>
#include <stdlib.h>
/* definizione della CODA */
typedef struct coda_t
{
int* items;
int max; /* numero di posti nella coda */
int first_available; /* posizione del primo posto libero nella coda */
} CODA;
void inizializza_coda(CODA *c, int max)
{
/* allocazione dell'array */
c->items = (int *) malloc(max * sizeof(int));
int i;
/* metto tutti gli elementi a zero */
for(i=0; i<max; ++i)
c->items[i] = 0;
/* inizializzo first_available */
c->first_available = 0;
/* imposto il numero di posti nella coda */
c->max = max;
}
int coda_piena(CODA *c)
{
return (c->first_available == c->max);
}
int coda_vuota(CODA *c)
{
return (c->first_available == 0);
}
void stampa_coda(CODA *c)
{
int i;
int *items = c->items;
int first_available = c->first_available;
printf("\n");
for(i = c->max-1; i >= first_available; --i)
printf("--\n");
for(i=first_available-1; i>=0; --i)
printf("%d\n", items[i]);
printf("\n");
}
void enqueue(CODA *c, int item)
{
if(coda_piena(c))
{
printf("Coda piena!\n");
}
else
{
c->items[c->first_available] = item;
++(c->first_available);
}
}
/* A partire dal secondo posto, sposta tutti gli elementi
* avanti di una posizione, verso la testa della coda */
void shift(CODA *c)
{
int i;
for(i=0; i < c->first_available; ++i)
{
c->items[i] = c->items[i+1];
}
}
int dequeue(CODA *c)
{
if(coda_vuota(c))
{
printf("Coda vuota!\n");
return -1;
}
/* il primo elemento e' sempre in posizione 0 */
int item = c->items[0];
/* faccio avanzare gli elementi rimasti */
shift(c);
--(c->first_available);
return item;
}
int main()
{
CODA coda;
inizializza_coda(&coda, 5);
if(coda_vuota(&coda))
printf("Coda vuota!\n");
enqueue(&coda, 1);
printf("Aggiunto 1\n");
enqueue(&coda, 3);
printf("Aggiunto 3\n");
stampa_coda(&coda);
int item = dequeue(&coda);
printf("Prelevato %d\n", item);
stampa_coda(&coda);
enqueue(&coda, 4);
printf("Aggiunto 4\n");
stampa_coda(&coda);
enqueue(&coda, 6);
printf("Aggiunto 6\n");
stampa_coda(&coda);
printf("Prelevato %d\n", dequeue(&coda));
stampa_coda(&coda);
return 0;
}