Erreur de segmentation
Fermé
monix927
Messages postés
7
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
31 janvier 2010
-
19 mai 2008 à 18:28
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 19 mai 2008 à 19:06
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 19 mai 2008 à 19:06
A voir également:
- Erreur de segmentation
- Erreur 0x80070643 - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Guide
- Erreur 1001 outlook - Guide
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur g030 - Forum Bbox Bouygues
2 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
19 mai 2008 à 18:53
19 mai 2008 à 18:53
Salut,
je n'ai pas étudié tes fonctions d'affichage (qui ne fonctionnent pas)
j'ai mis le commentaire en gras où j'ai modifié
je n'ai pas étudié tes fonctions d'affichage (qui ne fonctionnent pas)
j'ai mis le commentaire en gras où j'ai modifié
#include<stdio.h> #include<stdlib.h> typedef struct noeud *arbre; typedef struct noeud { int val; arbre g; arbre d; } noeud; typedef struct pile { arbre t[100]; int top; char sens; } pile; int pile_pleine (pile p) { p.top = 100; return 0; } int pile_vide (pile p) { p.top = 0; return 0; } void empiler (arbre x, pile p) { if (!pile_pleine (p)) { p.top = p.top + 1; p.t[p.top] = x; } else { printf ("pile déja pleine"); } } void depiler (arbre x, pile p) { if (pile_vide == 0) { printf ("pile deja vide"); } else { p.top = p.top - 1; } } void vider_pile (pile p) { p.top = 0; } void infixe (arbre a) { pile s; arbre p; vider_pile (s); p = a; while ((p != NULL) || (!pile_vide (s) == 0)) { while (p != NULL) { empiler (a, s); p = p->g; } depiler (a, s); printf ("%d\t", p->val); p = p->d; } } void prefixe (arbre a) { pile s; arbre p; vider_pile (s); p = a; while ((p != NULL) || (!pile_vide (s) == 0)) { while (p != NULL) { empiler (a, s); printf ("%d\t", p->val); p = p->g; } depiler (a, s); p = p->d; } } void postfixe (arbre a) { pile s; arbre p; vider_pile (s); p = a; while ((p != NULL) || (!pile_vide (s) == 0)) { while (p != NULL) { empiler (a, s); p = p->g; } depiler (a, s); printf ("%d\t", p->val); p = p->d; } } void ajout (int x, arbre a) { if (a == NULL) { /* == au lieu de = */ a = (arbre) malloc (1 * sizeof (arbre)); a->val = x; a->g = NULL; a->d = NULL; } else { if (x < a->val) { ajout (x, a->g); } else { ajout (x, a->d); } } } int main () { int x; char rep; arbre t; t = NULL; /* il faut initialiser l'arbre */ do { printf ("ajouter un nombre\n"); scanf ("%d", &x); getchar(); /* vider le buffer */ ajout (x, t); printf ("voulez-vous saisir a nouveau (o/n)\n"); scanf("%c",&rep); /* tu as oublié la saisie de rep */ } while (rep == 'o'); /* == et pas = */ printf ("affichage ave le parcours infixe\n"); infixe (t); printf ("affichage ave le parcours prefixe\n"); prefixe (t); return 0; }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
19 mai 2008 à 19:06
19 mai 2008 à 19:06
Voici un exemple, ça pourra peut être t'aider
#include<stdio.h> #include<stdlib.h> typedef struct N_ { int nb; struct N_*gauche; struct N_*droite; } Noeud; void CreerArbre (Noeud ** racine, int n); void Traiter (Noeud * racine); void AfficherPrefixe (Noeud * racine); void AfficherPostfixe (Noeud * racine); void AfficherInfixe (Noeud * racine); Noeud *alloc (); int main () { Noeud *racine; racine = NULL; int n; printf ("Numéro [100 pour terminer] ? "); scanf ("%d", &n); while (n != 100) { CreerArbre (&racine, n); printf ("Numéro [100 pour terminer] ? "); scanf ("%d", &n); } AfficherPrefixe (racine); puts (""); AfficherInfixe (racine); puts (""); AfficherPostfixe (racine); puts (""); return 0; } void CreerArbre (Noeud ** racine, int n) { Noeud *nouveau; nouveau = alloc (); if (*racine == NULL) { nouveau->nb = n; nouveau->gauche = NULL; nouveau->droite = NULL; *racine = nouveau; } else if (n < (*racine)->nb) CreerArbre (&(*racine)->gauche, n); else if (n > (*racine)->nb) CreerArbre (&(*racine)->droite, n); } Noeud *alloc () { Noeud *noeud; noeud = (Noeud *) malloc (sizeof (Noeud)); return noeud; } void Traiter (Noeud * racine) { printf ("%d (%p) ; ", racine->nb, racine); } void AfficherPrefixe (Noeud * racine) { if (racine != NULL) { Traiter (racine); AfficherPrefixe (racine->gauche); AfficherPrefixe (racine->droite); } } void AfficherPostfixe (Noeud * racine) { if (racine != NULL) { AfficherPostfixe (racine->gauche); AfficherPostfixe (racine->droite); Traiter (racine); } } void AfficherInfixe (Noeud * racine) { if (racine != NULL) { AfficherInfixe (racine->gauche); Traiter (racine); AfficherInfixe (racine->droite); } }Exécution
lami20j@debian:~/trash$ gcc arbre.c lami20j@debian:~/trash$ ./a.out Numéro [100 pour terminer] ? 15 Numéro [100 pour terminer] ? 10 Numéro [100 pour terminer] ? 26 Numéro [100 pour terminer] ? 8 Numéro [100 pour terminer] ? 56 Numéro [100 pour terminer] ? 2 Numéro [100 pour terminer] ? 42 Numéro [100 pour terminer] ? -1 Numéro [100 pour terminer] ? 100 15 (0x804a008) ; 10 (0x804a028) ; 8 (0x804a078) ; 2 (0x804a0e8) ; -1 (0x804a178) ; 26 (0x804a048) ; 56 (0x804a0a8) ; 42 (0x804a128) ; -1 (0x804a178) ; 2 (0x804a0e8) ; 8 (0x804a078) ; 10 (0x804a028) ; 15 (0x804a008) ; 26 (0x804a048) ; 42 (0x804a128) ; 56 (0x804a0a8) ; -1 (0x804a178) ; 2 (0x804a0e8) ; 8 (0x804a078) ; 10 (0x804a028) ; 42 (0x804a128) ; 56 (0x804a0a8) ; 26 (0x804a048) ; 15 (0x804a008) ;