Rechercher dans ce blog

lundi 5 mars 2012

un programme reparti en 3 fichier en c comporte une pile en representation chainé

pile.h

/*********************\

* pile.h *
\*********************/
typedef struct ElementListe{
char *donnee;
struct ElementListe *suivant;
} Element;

typedef struct ListeRepere{
Element *debut;
int taille;
} Pile;


/* 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_function.h

/***********************\

* pile_function.h *
\***********************/

void initialisation (Pile * tas){
tas->debut = NULL;
tas->taille = 0;
}

/* empiler (ajouter) un élément dans la pile */
int empiler (Pile * tas, char *donnee){
Element *nouveau_element;
if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
return -1;
if ((nouveau_element->donnee = (char *) malloc (50 * sizeof (char)))
== NULL)
return -1;
strcpy (nouveau_element->donnee, donnee);
nouveau_element->suivant = tas->debut;
tas->debut = nouveau_element;
tas->taille++;
}

/* depiler (supprimer un élément de la pile */
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;

for(i=0;itaille;++i){
printf("\t\t%s\n", courant->donnee);
courant = courant->suivant;
}
}


pile.c

/*********************\

* pile.c *
\*********************/
#include
#include
#include
#include "pile.h"
#include "pile_function.h"

int main ()
{
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 éléments): \n",tas->taille);
printf("\n********** Haut de la PILE **********\n");
affiche(tas);
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 ("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");

return 0;
}