bonjour a tous,
voila je suis sur un projet de "liste circulaire contigue" en langage c , mais là je coince sur la fonction supprimer, en fait je n'arrive à supprimer que la tete ou la queue de la liste . donc si quelqu'un a une astuce? et merci d'avance.
ci-dessous le code:
int supprimer(LISTE L, int pos){
int i,j;
ELEMENT e1,e2;
e1=elementCreer();
e2=elementCreer();
/* vérifier si la liste est vide */
if (listeVide(L)) {
printf("\nErreur de suppression: liste vide.");
return 0;
}
/* vérifier si la position est valide */
if(pos < 1 || pos >(L->lg)) {
printf("\nErreur de suppression: position %d invalide.",pos);
return 0;
}
/* suppression d'un élément */
elementDetruire(L->element[(L->tete +pos-1)%LongMax]);
/* décalage à gauche de tableau */
if(pos==1)
L->tete=(L->tete+1%LongMax);
else if(pos==L->lg)
L->queue=((L->queue)-1)%LongMax;
else if(pos>(L->lg)/2)
{
j=pos;
for (i= L->tete+pos-1; i<L->tete+L->lg -1; i ++)
{
printf("**********\nje suis laaaa\n*******");
printf("**********\npos=%d\n*******",pos);
e1=elementCopier(recuperer(L,j));
printf("\ne1=");
elementAfficher(e1);
e2=elementCopier(recuperer(L,j+1));
printf("\ne2=");
elementAfficher(e2);
elementAffecter(&e1, e2);
j++;
//free(e2);
}
L->queue=((L->queue)-1)%LongMax;
}
else{
j=pos-1;
for(i =L->tete+pos-1;i>L->tete;i--)
{
printf("**********\npos=%d\n*******",pos);
e1=elementCopier(recuperer(L,j));
printf("\ne1=");
elementAfficher(e1);
e2=elementCopier(recuperer(L,j+1));
printf("\ne2=");
elementAfficher(e2);
elementAffecter(&e2, e1);
j--;
//free(e1);
}
/* décrémentation de taille de liste */
L->tete=(L->tete+1%LongMax);
}
(L->lg)--;
return 1;
}