Se implementiamo la gestione di una coda con il seguente codice:
struct Coda {
int front, back; // indice della testa (posizione piena) e della coda (posizione vuota)
int size; // capacità della coda
int *queue; // puntatore agli elementi della coda
};
void crea(Coda& q, int n) { queue = new int[size = n]; q.back = q.front = 0;}
void enque(Coda& q, int e) { q.queue[back] = e; back = (back + 1) % size; }
void deque(Coda& q, int &e) { e = q.queue[front]; front = (front + 1) % size; }
int vuoto(Coda q) { return q.back == q.front; }
int pieno(Coda q) { return q.front == (q.back + 1)%size; }
void distruggi(Coda& q) {delete [] queue;}
Sbaglio oppure è corretto affermare che l'utilizzo del metodo/funzione membro
pieno non permetta mai di riempire completamente l'array dinamico con N elementi ma bensì N-1 ?
Se p.e. avessi:
N=4
front=0
back=3 (indice della coda disponibile per l'inserimento)
la coda contiene 3 elementi, quando vado ad invocare
pieno ottengo che
q.front == (q.back + 1)%size
0==(3+1)%4 quindi 0==0 è verificata e pertanto la coda risulta piena quindi non riesco ad inserire l'elemento con indice [3].