Bonjour,
J'ai créé une structure étudiant afin de l'utiliser dans une liste chainée pour gérer une école et différente section.
Ma fonction pour ajouter un étudiant par ordre alphabétique fonctionne quand il y a déjà des élément dans ma liste, par contre mon programme plante quand mon élément est le premier à devoir être inséré dans ma liste.
J'ai passé la journée dessus et je bloque...
Peut-être qu'un regard neuf et expert trouvera mon erreur?
C'est ma fonction: Etudiant * ajoutAlpha(Etudiant * tete,char inom[]);
qui ne fonctionne pas totalement, les autres fonctionnent.
ma structure (enum.h)
mes fonctions (Fct.c)
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 #ifndef ENUM_H #define ENUM_H typedef struct Etudiant Etudiant; struct Etudiant { char nom[25]; Etudiant * next;//pointeur vers la structure Etudiant suivante }; //creation de maillon Etudiant * creationMaillon(char nom[]); //insertion en tête Etudiant * insertionTete(Etudiant * tete, Etudiant * elt); //lire liste void lireList(Etudiant * tete); //libère mémoire void freeList(Etudiant * tete); //insertion dans l'ordre alphabétique Etudiant * ajoutAlpha(Etudiant * tete,char inom[]); #endif // ENUM_H
Et mon main.c
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "enum.h" //creation de maillon et hardcodage du nom Etudiant * creationMaillon(char nom[]) { Etudiant *maillon = NULL; maillon = malloc(sizeof(Etudiant)); if (maillon == NULL) { printf("Mémoire insuffisante"); exit(99); } sprintf(maillon->nom, nom); maillon->next = NULL; return maillon; } //insertion en tête Etudiant * insertionTete(Etudiant * tete, Etudiant * elt) { if (tete == NULL) { tete = elt; } else { elt->next = tete; tete = elt; } return tete; } //lire liste void lireList(Etudiant * tete) { while (tete != NULL){ printf("%s\n", tete->nom); tete = tete->next; } printf("---------------\n"); } //libère la mémoire void freeList(Etudiant * tete) { Etudiant * temp = NULL; while (tete != NULL) { temp = tete; tete = tete->next; printf("free(%s)\n", temp->nom); free(temp); } printf("---------------\n"); } //insertion dans l'ordre alphabétique Etudiant * ajoutAlpha(Etudiant * tete,char inom[]) { Etudiant *temp = tete; Etudiant *elt = NULL; elt = malloc(sizeof(Etudiant)); if (elt == NULL)//test si allocation a fonctionné { printf("Mémoire insuffisante"); exit(99); } strcpy(elt->nom,inom); if (temp == NULL) // si la liste est vide on renvoie elt return elt; else if( strcmp(temp->nom,inom) > 0 ) // si l'élément est a insérer en premier { elt->next=tete; return elt; } else // si l'élément est a insérer au milieu ou a la fin { while ( temp->next != NULL && strcmp(temp->next->nom,inom) < 0 ) // on trouve l'endroit { temp = temp->next; } elt->next = temp->next; temp->next = elt; } return tete; }
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 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "enum.h" int main() { Etudiant *teteListe = NULL, *maillon = NULL; teteListe = ajoutAlpha(teteListe,"Fred"); //maillon = creationMaillon("Fred"); //teteListe = insertionTete(teteListe, maillon); lireList(teteListe); teteListe = ajoutAlpha(teteListe,"Zoe"); lireList(teteListe); freeList(teteListe); return 0; }
Partager