### **IMPLEMENTAZIONE SEQUENZIALE STATICA (ARRAY CIRCOLARE)**
#include <stdio.h>
#define DIM_MAX 50
typedef int TipoElemCoda;
typedef struct {
TipoElemCoda elementi[DIM_MAX];
int primo;
int ultimo;
} TipoCoda;
void InitCoda(TipoCoda *c) {
c->primo = -1;
c->ultimo = -1;
int CodaVuota(TipoCoda c) {
return ([Link] == -1);
int CodaPiena(TipoCoda c) {
if ([Link] == [Link]) return 0;
else if ([Link] < [Link]) return (([Link] - [Link])==(DIM_MAX - 1));
else return ([Link] - [Link] == 1);
void InizioCoda(TipoCoda c, TipoElemCoda* val) {
if (CodaVuota(c)) {
printf("ERRORE: Coda vuota\n");
return;
*val = [Link][[Link]];
void InCoda(TipoCoda* c, TipoElemCoda val) {
if (CodaPiena(*c)) {
printf("ERRORE: Coda piena\n");
return;
if (CodaVuota(*c)) {
c->primo = 0;
c->ultimo = 0;
} else {
c->ultimo = (c->ultimo + 1) % DIM_MAX;
c->elementi[c->ultimo] = val;
// Rimuove e restituisce il primo elemento
void OutCoda(TipoCoda* c, TipoElemCoda* val) {
if (CodaVuota(*c)) {
printf("ERRORE: Coda vuota\n");
return;
*val = c->elementi[c->primo];
if (c->primo == c->ultimo) {
c->primo = -1;
c->ultimo = -1;
} else {
c->primo = (c->primo + 1) % DIM_MAX;
### **IMPLEMENTAZIONE COLLEGATA (LISTE DINAMICHE)**
#include <stdio.h>
#include <stdlib.h>
typedef int TipoElemCoda;
typedef struct NodoCoda {
TipoElemCoda info;
struct NodoCoda* next;
} TipoNodoCoda;
typedef struct {
TipoNodoCoda* primo;
TipoNodoCoda* ultimo;
} TipoCoda;
void InitCoda(TipoCoda* c) {
c->primo = NULL;
c->ultimo = NULL;
int CodaVuota(TipoCoda c) {
return ([Link] == NULL);
// Restituisce il primo elemento senza rimuoverlo
void InizioCoda(TipoCoda c, TipoElemCoda* val) {
if (CodaVuota(c)) {
printf("ERRORE: Coda vuota\n");
return;
*val = [Link]->info;
// Inserisce un elemento in coda
void InCoda(TipoCoda* c, TipoElemCoda val) {
TipoNodoCoda* nuovo = (TipoNodoCoda*)malloc(sizeof(TipoNodoCoda));
if (!nuovo) {
printf("ERRORE: Allocazione fallita\n");
return;
nuovo->info = val;
nuovo->next = NULL;
if (CodaVuota(*c)) {
c->primo = nuovo;
c->ultimo = nuovo;
} else {
c->ultimo->next = nuovo;
c->ultimo = nuovo;
}
// Rimuove e restituisce il primo elemento
void OutCoda(TipoCoda* c, TipoElemCoda* val) {
if (CodaVuota(*c)) {
printf("ERRORE: Coda vuota\n");
return;
TipoNodoCoda* temp = c->primo;
*val = temp->info;
c->primo = c->primo->next;
if (c->primo == NULL) {
c->ultimo = NULL;
free(temp);