3.3.1. Reprezentace fronty pomocí cyklického pole

Pokud se chceme vyhnout nutnosti přesouvat prvky pole , můžeme využít variantu založenou na cyklickém přidělování prvků statického pole. Zkuste si představit pole, do něhož budeme ukládat hodnoty, jako proužek papíru rozdělený na jednotlivé buňky a na koncích slepený tak, že za posledním prvkem pole následuje opět první prvek. Jednotlivé hodnoty pak budeme mít uložené v souvislé řadě kdekoliv v tomto poli, přičemž si budeme pamatovat pouze index, od kterého budeme prvky vybírat, a index, za který budeme prvky vkládat. Pokud by se stalo, že se oba indexy někde „potkají,“ znamená to, že došlo k zaplnění celého pole.

public class CyclicArrayQueue implements Queue 
{ 
  public CyclicArrayQueue(int size) { 
    _data = new Object[size]; 
  } 
 
  public void enqueue(Object obj) { 
    _data[_last] = obj; 
    if( ++_last == _data.length ) _last = 0; 
    assert _first != _last : "Fronta je plna"; 
  } 
 
  public Object dequeue() { 
    assert _first != _last : "Fronta je prazdna"; 
    Object obj = _data[_first]; 
    if( ++_first == _data.length ) _first = 0; 
    return obj; 
  } 
 
  public Object front() { 
    assert _first != _last : "Fronta je prazdna"; 
    return _data[_first]; 
  } 
 
  public boolean empty() { 
    return _first == _last; 
  } 
	 
  protected Object[] _data; 
  protected int _first = 0; 
  protected int _last  = 0; 
}