Bonsoir,
Pour essayer de vraiment bien comprendre les listes doublement chainées je viens de programmer quelques fonctions dont une qui permet d’insérer un élément :
ET là, dans cette partie :
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 void list_insert(Liste *p_list) { int age=0,position=0; printf("\n A quelle position ?"); scanf("%d",&position); printf("\n age ? "); scanf("%d",&age); if (p_list != NULL) //Si la liste n'est pas vide { struct personne *p_temp = p_list->premiere; int i=1; while (p_temp != NULL && i <= position) { if (position == i) { if (p_temp->suivante == NULL) { insertionEnd(p_list); } else if (p_temp->precedente == NULL) { insertion(p_list); } else { struct personne *p_new = malloc(sizeof *p_new); if (p_new != NULL) { p_new->age = age; p_temp->suivante->precedente = p_new; // Ici !! p_temp->precedente->suivante = p_new; p_new->precedente = p_temp->precedente; p_new->suivante = p_temp; p_list->taille++; } } } else { p_temp = p_temp->suivante; } i++; } } }
Je ne comprends pas bien. Si je fais un petit schéma,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6p_new->age = age; p_temp->suivante->precedente = p_new; // Ici !! p_temp->precedente->suivante = p_new; p_new->precedente = p_temp->precedente; p_new->suivante = p_temp; p_list->taille++;
L1 -- L2-- L3 --L4
Si je veux introduire un élément entre L2 et L3 on devrait avoir :
L3->precedent->suivant =LNEW (c'est à dire L2->suivant=LNEW )
L3>precedente=LNEW
et LNEW->suivant=L3
LNEW->precedent=L2
J'ai l'impression qu'un truc cloche dans le maillage là... Non ?
Partager