Bonjour, je n'arrive pas à voir ce qui na vas pas dans la construction de ma procédure; si vous pouviez me filer un coup de main ça serait sympas.

Le but est de supprimer un élément dans une liste si celui si est présent.

Voici les structure de base
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define taille 20
 
typedef struct ELEMENT
 {
   int valeur;
    char nom[taille];
 }ELEMENT;
 
typedef struct etc3
 {
  ELEMENT val;
  struct etc3 * prec;
  struct etc3 * suiv;
 }cellule;
 
typedef struct etlcd
 {
  cellule * courant; 
 }c2;
typedef c2 * LDC;
 
typedef LDC itLDC; /*renommage de LDC*/


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
void supprimer_element(itLDC *L,ELEMENT e)
{
	begin(L);
	if((*L)->courant !=NULL)
	{
		if(search((*L),e)==1)/*si l'élément est présent au moins une fois*/
		{
			begin(L);
			while(hasNext(*L))
			{/*on cherche un élément avec un nom et un prix similaire*/
				if(hasPrevious(*L))/*si ce n'est pas le premier élément*/
				{
					if((e.valeur == (*L)->courant->val.valeur) && (strcmp(e.nom,(*L)->courant->val.nom)==0))
					{
						(*L)->courant->prec->suiv=(*L)->courant->suiv;
						(*L)->courant->suiv->prec=(*L)->courant->prec;
						free((*L)->courant);
					}
					next(L);
				}
				else /*si c'est le premier élément*/
				{
					if((e.valeur == (*L)->courant->val.valeur) && (strcmp(e.nom,(*L)->courant->val.nom)==0))
					{
						(*L)->courant=(*L)->courant->suiv;
						free((*L)->courant->prec);
						(*L)->courant->prec=NULL;
					}	
                                       next(L);
				}
			}
			if((e.valeur == (*L)->courant->val.valeur) && (strcmp(e.nom,(*L)->courant->val.nom)==0))
			{/*si c'est le dernier élément*/
				if(hasPrevious(*L))/*si ce n'est pas le premier élément*/
				{
					(*L)->courant=(*L)->courant->prec;
					free((*L)->courant->suiv);
					(*L)->courant->suiv=NULL;
				}
				else/*si c'est le seul élément*/
				{
					free((*L)->courant);
					(*L)->courant=NULL;
				}
			}
		}
	}
}
A noter que les fonctions utilisées dans cette procédure fonctionne.
search renvoie un entier 1 ou 0 si l'élément en présent ou pas.
hasPrevioux et hasNext envoie 1 ou 0 si l'élément possède un élément précédent ou suivant.
next passe à l'élément suivant.


Merci pour votre aide.