In questa lezione studieremo la gestione di una coda in C.
Una coda (o queue) è una struttura dati astratta che, al contrario della pila, utilizza una politica di tipo FIFO. Ovvero il primo elemento ad entrare è anche il primo ad uscire.
Nella coda quindi l’inserimento avviene ad una estremità (coda), mentre la cancellazione e il prelievo dei dati avvengono all’altra estremità, cioè dalla testa.
Gestione di una coda in C mediante un array
Anche la gestione della coda può essere realizzata appoggiandosi ad un array.
Utilizzeremo inoltre una variabile fine per indicare l’ultima posizione occupata.
Dunque per inizializzare o svuotare la coda assegniamo all’indice fine il valore -1.
Quando facciamo l’operazione Pop dobbiamo spostare di una posizione a sinistra gli altri elementi.
La funzione Push aggiunge un nuovo elemento in coda e aggiorna l’indice fine.
Ecco dunque il semplice algoritmo che realizza le operazioni di inserimento ed estrazione di un elemento in un coda in c. Inoltre implementeremo le operazioni di stampa e svuotamento della coda.
Anche in questo esercizio, proposto principalmente a scopo didattico, facciamo uso delle variabili globali.
Ecco dunque il listato completo sulla gestione di una coda in C:
#include <stdio.h>
#define MAX 3
int fine;
int Coda[MAX];
int menu_scelta(void)
{
int selezione = 0;
do
{
printf("\n" );
printf("\n1 -> Aggiungi un dato" );
printf("\n2 -> Estrai un dato");
printf("\n3 -> Svuota pila");
printf("\n4 -> Stampa pila");
printf("\n5 -> Esci");
printf("\n" );
printf("\nEffettua una scelta: " );
scanf("%d", &selezione );
}
while (selezione<1 || selezione>5);
return selezione;
}
void Push() {
int n;
if(fine==MAX)
printf("\n -> Coda piena" );
else {
printf("\nInserisci un dato: " );
scanf("%d", &n);
Coda[fine++]=n;
}
}
void Pop() {
int i;
if(fine==-1)
printf("\n - Coda vuota" );
else {
printf("%d", Coda[0]);
for(i=1;i<=fine;i++)
Coda[i-1]=Coda[i];
fine--;
}
}
void Clear() {
fine=-1;
printf("\n -> Coda svuotata" );
}
void Print() {
int i;
if(fine==-1)
printf("\n -> Coda vuota" );
else
for(i=0;i<fine;i++)
printf("indice i: %d elemento %d\n", i, Coda[i]);
}
int main(){
int scelta;
while((scelta=menu_scelta())!=5){
switch(scelta){
case 1:
Push();
break;
case 2:
Pop();
break;
case 3:
Clear();
break;
case 4:
Print();
break;
case 5:
break;
}
}
return 0;
}
Chiaramente questo è solo un esempio di gestione di una coda in C, prossimamente proporrò altri esercizi.
Alcuni link utili
Allocazione dinamica della memoria con malloc
Esercitazione sulle struct in C
Realizzare un menù di scelta in C
Come sommare gli elementi della cornice esterna
Ricerca elementi in una matrice