#include "listaarchi.h" arco *creaarco (nodo *orig, nodo *dest) { arco *A = (arco *) malloc(sizeof(arco)); if (A == NULL) { printf("Memoria insufficiente per allocare un nuovo arco!\n"); exit(EXIT_MEMORY); } A->indice = 0; A->orig = orig; A->dest = dest; A->prev = NULL; A->next = NULL; return A; } listaarchi *crealistaarchi () { arco *A; // Crea l'elemento sentinella A = creaarco(NULL,NULL); A->next = A; A->prev = A; return A; } void distruggelistaarchi (listaarchi **pLA) { posarco *p; for (p = primolistaarchi(*pLA); !listaarchivuota(*pLA); canclistaarchi(&p)); // Dealloca l'elemento sentinella free(*pLA); *pLA = NULL; } posarco *primolistaarchi (listaarchi *L) { posarco *p = L->next; return p; } posarco *ultimolistaarchi (listaarchi *L) { posarco *p = L->prev; return p; } boolean finelistaarchi (posarco *p, listaarchi *L) { boolean b = (p == L); return b; } boolean listaarchivuota (listaarchi *L) { boolean b = (L->next == L) && (L->prev == L); return b; } posarco *succlistaarchi (posarco *p) { posarco *q = p->next; return q; } void inslistaarchi (arco *A, posarco *p) { A->prev = p->prev; A->next = p; p->prev->next = A; p->prev = A; } void canclistaarchi (posarco **pp) { posarco *q; q = *pp; q->prev->next = q->next; q->next->prev = q->prev; *pp = q->next; free(q); }