// La classe IntQueue (Coda di Interi)

class IntQueue{

    // Numero massimo di elementi della coda.
    // Costante static (di classe)
    private static final int MAX_ELEMENTS=100; 

    // Numero di elementi in coda
    private int el_number;

    // Array di elementi della coda
    private int[] elements;

    // Indice del primo elemento
    private int first;
    
    
    // Costruttore
    public IntQueue(){

	elements=new int[MAX_ELEMENTS];
	first=0;
	el_number=0;
    }

    

    // Test di coda vuota
    public boolean EmptyQueue(){
	
	return (el_number == 0);
	
    }


    // Restituisce il primo elemento in coda
    public int HeadQueue(){
	if (this.EmptyQueue()) {  
	    System.out.println("Errore: coda vuota");
	    return -1;
	}
	else return (elements[first]);
    }


    // Toglie il primo elemento dalla coda
    public void deQueue(){
	if (this.EmptyQueue()) 
	    System.out.println("Errore: coda vuota");
	else {
	    el_number--;
	    first = ((first +1) % MAX_ELEMENTS);
	}
    }

    // Aggiunge un elemento in coda
    public void enQueue(int e) {
	if (MAX_ELEMENTS <= el_number)
	    System.out.println("Errore: coda piena");
	else {
	    elements[(first+el_number)%MAX_ELEMENTS]=e;
	    el_number++;
	}
    }
	   

   
    // Stampa gli elementi della coda
    public void PrintQueue() {
	if (this.EmptyQueue())
	    System.out.println("Coda vuota");
	else{
	    System.out.println("Elementi della coda:");
	    for (int i=0; i< el_number; i++)
	      System.out.println(elements[(first+i)%MAX_ELEMENTS]);
	    }
    }

}

      
