Problème : Fonction qui insère récursivement des elements dans une liste triée
michael0703
Messages postés
4
Statut
Membre
-
michael0703 Messages postés 4 Statut Membre -
michael0703 Messages postés 4 Statut Membre -
Bonjour,
Ci-dessus le code que j'ai écrit pour insérer de manière récursive des elements dans une liste chainée triée. Néanmoins, ça ne fonctionne pas correctement.
La fonction
Merci de m'aider.
Ci-dessus le code que j'ai écrit pour insérer de manière récursive des elements dans une liste chainée triée. Néanmoins, ça ne fonctionne pas correctement.
Liste ajouter_element(Liste liste, int e) {
Liste nouveau;
if (liste == NULL)
return creer_maillon(e);
if(e <= liste->valeur && liste->suivant == NULL) {
nouveau = creer_maillon(e);
nouveau->suivant = liste;
return nouveau;
}
liste->suivant = ajouter_element(liste->suivant, e);
return liste;
}
La fonction
creer_maillon(int e)chargée de l'allocation et de l'initialisation des maillons ;
Liste creer_maillon(int e) {
Liste nouveau = (Liste *) malloc(sizeof(maillon));
if(nouveau == NULL) {
perror("L'allocation de memoire a echoue");
exit(EXIT_SUCCESS);
}
nouveau->valeur = e;
nouveau->suivant = NULL;
return nouveau;
}
Merci de m'aider.
2 réponses
Bonsoir,
La théorie
https://perso.esiee.fr/~landschm/IN3T01/Listes%20chainees%20dynamiques.pdf
Après les TP
Fin prêt pour la maîtrise
Je ne veux pas voir ce type de déclaration har type[80] pour tester excellent devant un prof non à moins qu'il soit sympa
http://gallium.inria.fr/~maranget/X/421/poly/listes.html
Go
La théorie
https://perso.esiee.fr/~landschm/IN3T01/Listes%20chainees%20dynamiques.pdf
Après les TP
void insertion_event(Tete_ev *liste, char type[80],float time)
{
/* Crйation du nouvel йlйment */
Event *nouveau = malloc(sizeof(*nouveau));
Event *p=liste->premier;
Event *l=liste->premier;
if ( nouveau == NULL)
{
exit(EXIT_FAILURE);
}
if(liste->premier==NULL){
liste->premier=nouveau;
liste->premier->time=time;
strcpy(liste->premier->type,type);
liste->premier->suivant=NULL;
}
else{
strcpy(nouveau->type,type);
nouveau->time = time;
if(l->suivant==NULL)
{
if(l->time>nouveau->time)
{
nouveau->suivant=l;
liste->premier=nouveau;
}else
{
liste->premier->suivant=nouveau;
}
}else if(liste->premier->suivant!=NULL)
{if(liste->premier->suivant->suivant==NULL){
if(liste->premier->time>=nouveau->time){
l=liste->premier->suivant;
liste->premier->suivant=nouveau;
nouveau->suivant=l;
l->suivant=NULL;
}
else{
l=liste->premier->suivant;
l->suivant=nouveau;
nouveau->suivant=NULL;}
}else{
l=liste->premier->suivant;
if(liste->premier->time>nouveau->time)
{
nouveau->suivant=liste->premier;
liste->premier=nouveau;
}else
{
p=liste->premier;
l=liste->premier->suivant;
while(l->suivant!=NULL )
{
if(nouveau->time>p->time && nouveau->time<l->time)
{
p->suivant=nouveau;
nouveau->suivant=l;
}
else
{
p=p->suivant;
l=l->suivant;
}
}if(nouveau->suivant==NULL)
{
if(nouveau->time>p->time && nouveau->time<l->time)
{
p->suivant=nouveau;
nouveau->suivant=l;
l->suivant=NULL;
}
else{
l->suivant=nouveau;
nouveau->suivant=NULL;}
}
}
}
}}
}
void suppression_event(Tete_ev *liste)
{
if (liste == NULL)
{
exit(EXIT_FAILURE);
}
if (liste->premier != NULL)
{
Event *aSupprimer = liste->premier;
liste->premier = liste->premier->suivant;
free(aSupprimer);
}
}
void afficher_event(Tete_ev *liste)
{
if (liste == NULL)
{
exit(EXIT_FAILURE);
}
Event *actuel = liste->premier;
while (actuel != NULL)
{
printf("type->%s \n time->%f \n", actuel->type,actuel->time);
actuel = actuel->suivant;
}
}
int nombreevent(Tete_ev *tete)
{
int i = 0;
if(tete->premier == NULL)
{
return 0;
}
/* Sinon, tant qu'il y a encore un élément ayant la val = valeur */
while(tete->premier != NULL)
{
/* On incrémente */
tete->premier = tete->premier->suivant;
i++;
}
/* Et on retourne le nombre d'occurrences */
return i;
}
Fin prêt pour la maîtrise
Je ne veux pas voir ce type de déclaration har type[80] pour tester excellent devant un prof non à moins qu'il soit sympa
http://gallium.inria.fr/~maranget/X/421/poly/listes.html
Go