#include "listanodi.h" nodo *creanodo (int i, int j, char Tipo) { nodo *N = (nodo *) malloc(sizeof(nodo)); if (N == NULL) { printf("Memoria insufficiente per allocare il nodo (%d,%d,%c)!\n",i,j,Tipo); exit(EXIT_MEMORY); } N->indice = 0; N->i = i; N->j = j; N->Tipo = Tipo; N->LA = crealistaarchi(); N->prev = NULL; N->next = NULL; return N; } listanodi *crealistanodi () { nodo *N; // Crea l'elemento sentinella N = creanodo(0,0,' '); N->next = N; N->prev = N; return N; } void distruggelistanodi (listanodi **pLN) { posnodo *p; for (p = primolistanodi(*pLN); !listanodivuota(*pLN); canclistanodi(&p)); // Dealloca l'elemento sentinella free(*pLN); *pLN = NULL; } posnodo *primolistanodi (listanodi *L) { posnodo *p = L->next; return p; } posnodo *ultimolistanodi (listanodi *L) { posnodo *p = L->prev; return p; } boolean finelistanodi (posnodo *p, listanodi *L) { boolean b = (p == L); return b; } boolean listanodivuota (listanodi *L) { boolean b = (L->next == L) && (L->prev == L); return b; } posnodo *succlistanodi (posnodo *p) { posnodo *q = p->next; return q; } void inslistanodi (nodo *N, posnodo *p) { N->prev = p->prev; N->next = p; N->prev->next = N; p->prev = N; } void canclistanodi (posnodo **pp) { posnodo *q; q = *pp; q->prev->next = q->next; q->next->prev = q->prev; *pp = q->next; free(q); }