Implémenter et manipuler une pile de caracter

Fermé
angellmimi - 5 avril 2008 à 17:47
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 5 avril 2008 à 19:14
Bonjour,ds l'ex il s'agit d'implémenter et de manipuler une pile de caractères , en utilisant la représentation contigue d'une pile ,g deja implémenté la structure de données Pile , mais qd g programmé une fonction main pr testé la pile caracteres, lors de l'execution ca marche pas , voila mon programme :

//pile.h :
#ifndef _pile_h_
#define _pile_h_

#include <stdio.h>
#include<stdlib.h>
typedef int Element ;
typedef struct Pile {
int sommet ;
char *tab;
Element *element;
}pile;
pile empiler ( pile p , char caract) {
p.sommet++;
p.element[p.sommet]=caract;
return p ;}
pile depiler ( pile p){
if(p.sommet==-1) {
printf("il n'y a rien a depiler");
}
else {
printf(" le caracatere a depiler est %c ",p.element[p.sommet]);
p.element[p.sommet]='\0';
p.sommet--;
}
return p ;
}
void taille (pile p ){
printf("la taille de la pile est %d",p.sommet+1);
}
void sommet (pile p ){
if ( p.sommet=-1 ) {
printf(" la pile est vide : ");
}
else {
printf ( " le sommet de la pile est : %c ",p.element[p.sommet]);
}
}
void affichage (pile p){char n,i ;
if ( p.sommet=-1 ) {
printf(" la pile est vide : ");
}
n = p.sommet ;
while ( n > -1 ){

printf(" %c ",p.element[n]);
n--;
}
}
int main (){char ch ; int compt;pile p;char ch_;
printf ("-------------------------------------MENU---------------------------------------\n\n");
printf (" \n1- empiler un caractere dans la pile : \n");
printf (" \n2- depiler un caractere de la pile : \n");
printf (" \n3- taille de la pile : \n");
printf (" \n4- sommet de la pile : \n");
printf (" \n5- afficher le contenu de la pile : \n");
printf (" \n6- quitter le programme : \n\n");
scanf("%d",&compt);
if ( compt ==1){
printf ("entrer le caracatere a empiler :");
scanf("%c",&ch);
p =empiler ( p , ch );
}
else if (compt==2) { printf ("entrer le caracatere a depiler :");
scanf("%c",&ch_);
p =depiler ( p );
}
else if (compt==3) { taille ( p ); }
else if (compt==4) { sommet ( p); }
else if (compt==5) { affichage (p); }
else if (compt== 6 ){ exit (-1);}


si kelk1 pouvais m'aider .. MERCI

1 réponse

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 569
5 avril 2008 à 19:14
Salut,

par exemple dans la fonction

pile empiler (pile p, char caract)
{
p.sommet++;
p.element[p.sommet] = caract;
return p;
}



p.sommet++ peut contenir n'importe quoi puisque p.sommet n'est pas initialisé
element c'est un pointeur de type Element (un int), si tu ne va pas allouer de la mémoire tu auras sûrement une Erreur de segmentation.

Personnellement pour l'implementation d'une plie j'aurais plutôt utilisé une liste chaînée (tu peux regarder ici pour un exemple http://www.commentcamarche.net/faq/sujet 8283 les piles en langage c

0