Gestione della Coda
Schede primarie
In informatica per coda si intende una struttura dati di tipo FIFO: First In First Out cioè.. il primo in ingresso è il primo ad uscire.
Un esempio pratico sono le code che in un paese civile(Italia esclusa) si fanno per ottenere un servizio, come pagare al supermercato o farsi tagliare i capelli dal parrucchiere: idealmente si viene serviti nello stesso ordine con cui ci si è presentati.
Questo tipo di struttura dati è molto utilizzata in informatica, ad esempio nella gestione delle operazioni da eseguire da parte di un sistema operativo, ed è fondamentale nelle telecomunicazioni, in particolare nelle reti a commutazione di pacchetto, dove descrive la gestione dei pacchetti in attesa di essere trasmessi su un collegamento.
Le operazioni su una coda sono: enqueue, dequeue, front, isEmpty, isFull.
Enqueue: accodamento di un elemento, serve a mettere un elemento in coda.
Dequeue: rimozione dell'elemento in testa alla coda.
Front: legge l'elemento in testa alla coda senza rimuoverlo.
is_Empty: restituisce true se la coda è vuota.
Is_Full: restituisce true se la pila è piena (nel caso l'implementazione preveda una capacità massima ).
/*
* File: main.cpp
* Author: Geny
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 5
void enqueue(int[], int&);
int dequeue(int[], int&);
void visual(int[], int, int);
int main()
{
int v[MAX], scelta, t = 0, c = -1, f = 0;
do
{
printf("----------------\n");
printf("MENU: ");
if ((((c + 1) % MAX) == t) && (f == 0))
{
printf("Coda Vuota \n");
printf("1) Inserimento \n");
printf("9) Uscita \n");
printf("\nTua scelta => ");
scanf("%d", &scelta);
switch (scelta)
{
case 1:
enqueue(v, c);
f = 1;
break;
case 9:
break; // Exit opzione valida(nn dare errore) ma verrà eseguita piu avanti dal while
default:
printf("Opzione non valida! \n");
break;
}
}
else if ((((c + 1) % MAX) == t) && (f == 1))
{
printf("Coda Piena \n");
printf("2) Estrazione \n");
printf("3) Visualizz. \n");
printf("9) Uscita \n");
printf("\nTua scelta => ");
scanf("%d", &scelta);
switch (scelta)
{
case 2:
dequeue(v, t);
f = 0;
break;
case 3:
visual(v, t, c);
break;
case 9:
break; // Exit opzione valida(nn dare errore) ma verrà eseguita piu avanti dal while
default:
printf("Opzione non valida! \n");
break;
}
}
else
{
printf("Coda non Vuota e non Piena \n");
printf("1) Inserimento \n");
printf("2) Estrazione \n");
printf("3) Visualizz. \n");
printf("9) Uscita \n");
printf("\nTua scelta => ");
scanf("%d", &scelta);
switch (scelta)
{
case 1:
enqueue(v, c);
f = 1;
break;
case 2:
dequeue(v, t);
f = 0;
break;
case 3:
visual(v, t, c);
break;
case 9:
break; // Exit opzione valida(nn dare errore) ma verrà eseguita piu avanti dal while
default:
printf("Opzione non valida! \n");
break;
}
}
printf("\n\n");
}
while (scelta != 9); // Exit
return (EXIT_SUCCESS);
}
// Funzioni
void enqueue(int v[], int &k)
{
k = (k + 1) % MAX; // Inc l'indice della coda(k) in una pos libera per ins
printf("Numero da inserire in posizione %d => ", k);
scanf("%d", &v[k]);
}
int dequeue(int v[], int &k)
{
int e = v[k];
//printf("E' stato estratto il numero %d che si trovava nella posiz %d", v[k], k);
printf("Estrazione della posizione %d : \n", k);
printf("Numero = %d\n", v[k]);
k = (k + 1) % MAX; // Inc l'indice della testa(k) all'elemento sucessivo
return (e);
}
void visual(int v[], int k, int j)
{
printf("Coda = ");
do
{
printf(" v[%d]=%d ", k, v[k]);
k = ((k + 1) % MAX); // se arrivi in fondo al vettore riparti dall'inizio fino araggiungere l'indice di coda
}
while (k != (j + 1) % MAX);
}
Versione stampabile- Accedi o registrati per inserire commenti.
- letto 397 volte
- Send to friend

