Il 0% ha trovato utile questo documento (0 voti)
8 visualizzazioni5 pagine

CODE

Il documento descrive due implementazioni di una coda: una utilizzando un array circolare e l'altra utilizzando una lista dinamica. Entrambe le implementazioni includono funzioni per inizializzare la coda, verificare se è vuota o piena, inserire e rimuovere elementi. Vengono forniti anche messaggi di errore per le operazioni non valide.

Caricato da

Emilio Massimino
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
8 visualizzazioni5 pagine

CODE

Il documento descrive due implementazioni di una coda: una utilizzando un array circolare e l'altra utilizzando una lista dinamica. Entrambe le implementazioni includono funzioni per inizializzare la coda, verificare se è vuota o piena, inserire e rimuovere elementi. Vengono forniti anche messaggi di errore per le operazioni non valide.

Caricato da

Emilio Massimino
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

### **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);

Potrebbero piacerti anche