#include "listalibri1.h" listalibri crealista () { listalibri L = (listalibri) malloc(sizeof(elemlibro)); if (L == NULL) { printf("Memoria insufficiente per allocare la lista dei libri!\n"); exit(EXIT_MEMORY); } L->next = L; L->prev = L; return L; } void distruggelista (listalibri *pL) { poslibro p; for (p = primolista(*pL); !listavuota(*pL); canclista(&p,*pL)); free(*pL); *pL = NULL; } poslibro primolista (listalibri L) { poslibro p = L->next; return p; } poslibro ultimolista (listalibri L) { poslibro p = L->prev; return p; } boolean finelista (poslibro p, listalibri L) { boolean b = (boolean) (p == L); return b; } boolean listavuota (listalibri L) { boolean b = (boolean) ( (L->next == L) && (L->prev == L) ); return b; } poslibro succlista (poslibro p, listalibri L) { poslibro q = p->next; return q; } poslibro preclista (poslibro p, listalibri L) { poslibro q = p->prev; return q; } char *leggilista (poslibro p, listalibri L) { return p->AutoreTitolo; } void scrivilista (char *AutoreTitolo, poslibro p, listalibri L) { strcpy(p->AutoreTitolo,AutoreTitolo); } void inslista (char *AutoreTitolo, poslibro p, listalibri L) { poslibro q = (poslibro) malloc(sizeof(elemlibro)); if (q == NULL) { printf("Memoria insufficiente per allocare il libro %s!\n",AutoreTitolo); exit(EXIT_MEMORY); } scrivilista(AutoreTitolo,q,L); q->prev = p->prev; q->next = p; p->prev->next = q; p->prev = q; } void canclista (poslibro *pp, listalibri L) { poslibro q; q = *pp; q->prev->next = q->next; q->next->prev = q->prev; *pp = q->next; free(q); }