#include #include #include #define nbsect 100000 #define nbfic 1000 typedef struct element *pelement,element; typedef struct pln *ppln,pln; struct element { pelement next,prev; ppln tete; }; struct pln { element p; int longueur; char nom[40]; }; element fat[nbsect]; pln fic[nbfic]; // fic[0] est la liste des secteurs libres // fic[1] est la liste des entĂȘtes de fichiers libres void format() { int i; for(i=0;iprev=fat[nbsect-1].next=&fic->p; for(i=1;iprev->next=p->prev; p->next->prev=p->next; *f=(pln){{p,p,f},0,""}; strcpy(nom,f->nom); return f-fic; } pelement tetefic(int i) { return &fic[i].p; } pelement creenext(pelement e) { if(!fic->longueur) return 0; pelement f=fic->p.next; if(&e->tete->p!=e && e-fattete->p!=e->next && e->next>fat && e->next[-1].tete==fic) f=e->next-1; fic->longueur--; f->next->prev=f->prev; f->prev->next=f->next; e->tete->longueur++; *f=*e; f->prev=e; return f; } void libere(pelement e) { if(&e->tete->p==e || e->tete==fic || e->tete==fic+1) return; e->tete->longueur--; e->next->prev=e->prev; e->prev->next=e->next; int l1=e>fat && e[-1].tete==fic, l2=ep; *e=(element){f->next,f,fic}; e->next->prev=e; f->next=e; fic->longueur++; }