allora:
in enqueue il primo if controlla, come hai detto tu, che la coda sia piena o che la cosa sia vuota, se è vero uno dei due controlli riporta l'indice dell'ultimo oggetto a zero e assegna l'oggetto nuovo alla casella 0 dell'array, in parole povere se la coda è vuota la inizializza se è piena sovrascrive l'oggetto più vecchio con quello nuovo;
Inoltre controlla che se anche l'indice al primo oggetto è uguale a -1 (quindi siamo nel caso che la cosa sia vuota) e sposta lo stesso indice al primo oggetto disponibile.
Invece se i primi due controlli sono entrambi falsi (quindi nella coda c'è come minimo un oggetto) incrementa l'indice all'ultimo oggetto di una posizione e assegna il nuovo oggetto alla nuovo valore dell'indice all'ultimo oggetto.
Il metodo dequeve estrae il primo oggetto dalla coda, controlla che dentro la coda ci sia solo un oggetto (first==last), se è vero resetta la coda senò controlla che l'indice al primo oggetto sia arrivato alla fine della coda, se è vero riporta l'indice a zero in modo da poter scorrere di nuovo la cosa dall'inizio, se è falso (quindi l'indice sta in un posto imprecisato all'interno della cosa) lo incrementa di una posizione.
Alla fine di tutto ritorna l'oggetto che era al primo posto della coda.