#include "lista.h" elemento *creaelemento (int info) { elemento *q = (elemento *) malloc(sizeof(elemento)); if (q == NULL) { printf("Memoria insufficiente per allocare l'elemento %d!\n",info); exit(EXIT_MEMORY); } q->info = info; return q; } lista *crealista () { lista *L = (lista *) malloc(sizeof(lista)); 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 (lista **pL) { posizione *p; for (p = primolista(*pL); !listavuota(*pL); canclista(&p)); *pL = NULL; } posizione *primolista (lista *L) { posizione *p = L->next; return p; } posizione *ultimolista (lista *L) { posizione *p = L->prev; return p; } boolean finelista (posizione *p, lista *L) { boolean b = (p == L); return b; } boolean listavuota (lista *L) { boolean b = (L->next == L) && (L->prev == L); return b; } posizione *succlista (posizione *p) { posizione *q = p->next; return q; } /* !!!VECCHIA VERSIONE DI inslista!!! void inslista (int info, posizione *p) { posizione *q = (posizione *) malloc(sizeof(utente)); if (q == NULL) { printf("Memoria insufficiente per allocare l'utente %d!\n",indice); exit(EXIT_MEMORY); } q->info = info; q->prev = p->prev; q->next = p; p->prev->next = q; p->prev = q; } */ void inslista (elemento *q, posizione *p) { q->prev = p->prev; q->next = p; p->prev->next = q; p->prev = q; } void canclista (posizione **pp) { posizione *q; q = *pp; q->prev->next = q->next; q->next->prev = q->prev; *pp = q->next; free(q); } posizione *findelemento (int info, lista *L) { posizione *p; for (p = primolista(L); !finelista(p,L); p = succlista(p)) if (p->info == info) return p; return NULL; }