bonjour à tous. Je suis entrain de faire des exercices sur les listes chainées, mais j'avoue qu'il y a quelque chose que je n'ai pas bien compri. J'ai fais un code à mo avis très simple d'insertion d'entiers dans une liste ordonée mais je ne sais pas vraiment à quel niveau se trouve le problème, j'ai une erreur du type "segentation fault", donc un problèmr de pointeurs j'immagine. je vous poste le code et voir si vous pourriez me donner un coup de main. Je suis ouvert à tous les critiques et suggestions,..merci d'avance
voici mon type Liste
puis le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct Liste{ int valeur; //champ données struct Liste *suiv; //pointeur vers l'élément suivant } Liste;
et mon main
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 void insererEnOrdre(Liste **tete, int x){ Liste *p, *pp, *nouvelElement; p = *tete; pp = p; //printf("(x, tete.val) = (%d , %d )\n", (*tete)->valeur, x); if(*tete == NULL){ printf("1 "); ajouterEnTete(tete, x); }else{ while(p!=NULL && x > p->valeur){ pp = p; p = p->suiv; } if(p!=NULL && x == p->valeur){ //on insert pas x ici, mais on peut bien choisir de l'inserer aussi //dans ce cas on le fais dans le cas précédent printf("%d existe déjà ",x); return; }else{ nouvelElement = malloc(sizeof(Liste)); nouvelElement->valeur = x; if(p!=NULL && x < p->valeur){ //insertion de x avant p et après pp nouvelElement->suiv = p; pp->suiv = nouvelElement; }else{ //insertion en queue //nouvelElement->suiv == NULL; pp->suiv = nouvelElement; } } } }
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 #include <stdio.h> #include <stdlib.h> #include "ListeChaineeSimple.h" int main(void){ Liste *maListe = NULL; insererEnOrdre(&maListe, 60); insererEnOrdre(&maListe, 20); insererEnOrdre(&maListe, 15); insererEnOrdre(&maListe, 100); insererEnOrdre(&maListe, 15); insererEnOrdre(&maListe, 10); afficher(maListe); return EXIT_SUCCESS; }
Partager