(java) array circolari e code

aduri

Nuovo Utente
3 Ott 2006
13
2
0
57
Genova
Salve a tutti lo scritto di Java l’ho passato e ringrazio tutti ma per l’orale sto analizzando questo codice ma ho alcuni dubbi su dei metodi.


Codice:
public class ArrayQueue implements Queue { 
int first, last, size; 
Object[] data; 
public ArrayQueue(int n){ 
size=n; 
data = new Object[size]; 
first=last=-1; 
} 
public boolean isFull() { 
return first==0 && last==size-1 || first==last+1; //caso a e b (chiaro) 
} 
public boolean isEmpty() { 
return first==-1;  // array non inizializzato 
} 
public Object front() { return data[first];} //metodo che ritorna il primo elemento 

public void clear() { last=first=-1;}} 

public void enqueue(Object el) { 
if (last==size-1 || last==-1){ 
data[0]=el; 
last=0; 
if (first ==-1) 
first=0; 
} 
else 
data[++last]=el; 
} 
public Object dequeue() { 
Object tmp = data[first]; 
if (first==last) 
last=first=-1; 
                 else if (first == size-1) 
first=0; 
   else 
first++; 
return tmp; 
}


Nel metodo enqueue il primo if dice che se l’ultimo elemento dell’array esiste o l’array non e’ inizializzato si carica l’oggetto el nella prima posizione dell’array last si mette a 0 perche’ last corrisponde a first? Non caapisco poi il secondo if (first==-1) first=0; non dovrebbe anche qua caricare l’oggetto el essendo l’array non inizializzato?
Il metodo dequeue crea un oggetto temporaneo col primo elemento dell’array poi col primo if fa un controllo per vedere se e’ presente un solo elemento se si’ ritorna l’array vuoto last=first=-1 poi controlla se c’e’ un solo elemento nell’ultima posizione e qui non capisco che differenza ci sia rispetto al precedente (non dovrebbe ritornare array vuoto first=last=-1)?
 
  • Like
Reactions: ottofonsuppost