Implémenter et manipuler une pile de caracter
angellmimi
-
lami20j Messages postés 21644 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21644 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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
//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
A voir également:
- Implémenter et manipuler une pile de caracter
- Pile carte mere - Guide
- Comment changer pile souris contactor ✓ - Forum MacOS
- Pile bios empêche démarrage pc ✓ - Forum Carte-mère/mémoire
- Démarrer PC sans pile ✓ - Forum Matériel & Système
- Pile manette wii ✓ - Forum Wii
1 réponse
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
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