Tu peut modifier ta structure comme sa:
typedef struct TCell{
void *cell;
struct TCell *next;
struct TCell *previous;
}*TCell;
typedef struct{
TCell *begin;
TCell *end;
TCell *iterator;
//Ces lignes semblent en trop
/* int sizeElt;
int length;
int posIterator;*/
void (*liberer)(void*);
void (*afficher)(void*);
void (*comparer)(void*,void*);
}*TList;
Et par exemple la creation pourrai etre:
//la taille(sizeElt) d'une liste simplement chainée ou doublement n'est pas utile si tu n'utilise pas de tableau pour les crées
TList * TListCreate(/*int sizeElt, */void (*liberer)(void*),void (*comparer)(void*,void*)){
TList * self = malloc(sizeof(*self));
if(self == NULL){
perror(malloc());
exit(errno);
}
self->begin = NULL;
self->end = NULL;
self->iterator = NULL;
self->liberer = liberer;
self->comparer = comparer;
self->afficher = NULL;
//Ces lignes me semblent superflus
/* self->sizeElt = sizeElt;
self->length = 0;
self->posIterator = -1;*/
return self;
}
Et pour l'insertion tu aurai un truc du genre:
//Ici je ne tient pas compte de la comparaison mais on peu la rajouter pour avoir par exemple une liste ordonnée
void pushEnd(TList *l,const void *elt){
TCell *tmp = malloc(sizeof(*tmp));
if(tmp == NULL){
perror(malloc());
exit(errno);
}
tmp->cell = elt;
tmp->previous = l->end;
tmp->next = NULL;
l->end = tmp;
}
Et par exemple pour l'affichage on aurai:
void afficher_liste(TList * self){
if(self->afficher != NULL){
for(TCell *tmp = self->begin ;tmp!=NULL; tmp = tmp->next)
self->afficher(tmp->cell);
}
}
Apres a chacun sa vision des choses.
Voilu ;)