Ajout élément par ordre alphabétique dans une liste chainée
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...:calim2:
Peut-être qu'un regard neuf et expert trouvera mon erreur? :D8O
C'est ma fonction: Etudiant * ajoutAlpha(Etudiant * tete,char inom[]);
qui ne fonctionne pas totalement, les autres fonctionnent.
ma structure (enum.h)
Code:
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 |
mes fonctions (Fct.c)
Code:
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;
} |
Et mon main.c
Code:
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;
} |