Il problema con l'uso di un array (circolare o meno) come struttura dati sottostante per una coda di priorità è che devi sempre copiare gli elementi per creare un buco dove inserire un nuovo elemento o per riempire il buco creato rimuovendo un elemento.
In un'implementazione molto ingenua, usando il tuo array circolare, potresti usare il seguente schema:
- Quando aggiungi un elemento, aggiungilo sempre nella posizione indicata da
next
e incrementa next
.
- Quando rimuovi un elemento, copia l'elemento indicato da
first
nella posizione appena liberata e incrementa first
.
Questo schema è facile da implementare, ma presenta il grande svantaggio che è necessario eseguire il ciclo sull'intera (parte utilizzata della) matrice per trovare l'elemento con la massima priorità.
Per gli esercizi di apprendimento, questo non è un grosso problema, ma sicuramente lo si vuole evitare nel codice di produzione.
Nel codice di produzione, è preferibile utilizzare una struttura dati che viene continuamente ordinata sulla priorità degli articoli, in modo che l'elemento con la priorità più alta sia sempre in primo piano. Questo può essere fatto con array (preferibilmente array normali, non circolari) o liste collegate. Gli elenchi collegati possono avere un vantaggio in termini di prestazioni perché è più semplice aggiungere elementi al centro e rimuovere il primo elemento senza dover toccare un gruppo di altri elementi.