salut bon voila mon programme ;le probleme reside dans la fonction d'affichage
car quand je fais le test sur les elements a affiche il bloque et quand
j'enleve le test il marche.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct ElementListe
{
char *donnee;
struct ElementListe *suivant;
} Element;
typedef struct ListeRepere
{
Element *debut;
int taille;
} Pile;
main ()
{int n,i,p;
char name;
/* initialisation */
void initialisation (Pile *tas);
/* EMPILER*/
int empiler (Pile *tas, char *donnee);
/* DEPILER*/
int depiler (Pile *tas);
/* Affichage de élément en haut de la pile (LastInFirstOut) */
#define pile_donnee(tas) tas->debut->donnee
/* Affiche la pile */
void affiche (Pile *tas);
Pile *tas;
char *nom;
if ((tas = (Pile *) malloc (sizeof (Pile))) == NULL)
return -1;
if ((nom = (char *) malloc (50 * sizeof (char))) == NULL)
return -1;
initialisation (tas);
printf ("Entrez un mot : ");
scanf ("%s", nom);
empiler (tas,nom);
printf ("La pile (%d elements): \n",tas->taille);
printf("\n********** Haut de la PILE 1 **********\n");
affiche(tas);
printf("__________ Bas de la PILE 1__________\n\n");
printf("\n********** Haut de la PILE **********\n");
printf("__________ Bas de la PILE __________\n\n");
printf ("Entrez un mot : ");
scanf ("%s", nom);
empiler (tas,nom);
printf ("La pile (%d éléments): \n",tas->taille);
printf("\n********** Haut de la PILE **********\n");
printf("__________ Bas de la PILE __________\n\n");
printf ("Entrez un mot : ");
scanf ("%s", nom);
empiler (tas,nom);
printf ("La pile (%d éléments): \n",tas->taille);
printf("\n********** Haut de la PILE **********\n");
affiche(tas);
printf("__________ Bas de la PILE __________\n\n");
printf ("\nLe dernier entré (LastInFirstOut) %s sera supprimé",
pile_donnee(tas));
printf ("\nLe dernier entré est supprime\n");
depiler (tas);/* suppression de dernier element entre */
printf ("La pile (%d éléments): \n",tas->taille);
printf("\n********** Haut de la PILE **********\n");
affiche(tas);
printf("__________ Bas de la PILE __________\n\n");
system ("pause");
return 0;
}
void initialisation (Pile *tas)
{
tas->debut = NULL;
tas->taille=0;
}
int empiler (Pile *tas, char *donnee)
{
Element *nouveau_element;
if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
return -1;
//nouveau_element->donnee = (char) malloc (50 * sizeof (char));
if (nouveau_element->donnee == NULL)
return -1;
strcpy (nouveau_element->donnee, donnee);
nouveau_element->suivant = tas->debut;
tas->debut = nouveau_element;
tas->taille++;
}
int empiler2 (Pile *tas2, char *donnee)
{
Element *nouveau_element;
if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
return -1;
//nouveau_element->donnee = (char) malloc (50 * sizeof (char));
if (nouveau_element->donnee == NULL)
return -1;
strcpy (nouveau_element->donnee, donnee);
nouveau_element->suivant = tas2->debut;
tas2->debut = nouveau_element;
tas2->taille++;
}
//depiler
int depiler (Pile *tas)
{
Element *supp_element;
if (tas->taille == 0)
return -1;
supp_element = tas->debut;
tas->debut = tas->debut->suivant;
free (supp_element->donnee);
free (supp_element);
tas->taille--;
return 0;
}
/* affichage de la pile */
void affiche (Pile * tas)
{
Element *courant;
int i;
courant = tas->debut;
do {
for(i=0;i<tas->taille;++i)
{ printf("\t\t%s\n", courant->donnee);
courant = courant->suivant;
}
}
while (courant->donnee!='(' && courant->donnee!=')');
}
|