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.

Banner Pubblicitario

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.

Banner pubblicitario

Alcuni link utili

Indice argomenti linguaggio C

La funzione fopen

La funzione fclose

Funzione fprintf

Funzione fscanf

Allocazione dinamica della memoria con malloc

Strutture in C

Typedef struct in C

Esercitazione sulle struct in C

Realizzare un menù di scelta in C

Strutture complesse in C

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Tavola pitagorica in C

Array multidimensionali

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C