mon code complet sur la pile :
Citation:
Envoyé par
hegros
Fournit un code complet qui compile ou au moins celui que tu as (avec le main et tout et tout)
Bonjour,
je vous communique mon code complet avec le prohramme principale et les fonctions de gestions de la pile :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| //prgramme qui manipule la notion de la pile
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#define maxp 100 //nobmre d'élément que la pile peut supporter
typedef int element;
typedef struct pile
{
element t[maxp];
int sommet;
}PILE;
PILE p;
//initialiser la pile
void initialiser(PILE p)
{
p.sommet=0;
//p.t[maxp]=NULL;
}
//teste si la pile est vide ou pas
int pile_vide(PILE p)
{
if(p.t[p.sommet]==0)
return 1;
return 0;
}
//teste si la pile est pleine ou pas
int pile_pleine(PILE p)
{
if(p.t[p.sommet]>=maxp)
return 1;
return 0;
}
//empiler de la pile
void emp(PILE &p,element x)
{
if(!pile_pleine(p))
{
p.t[p.sommet]=x;
p.sommet++;
}
else printf("la pile est pleine \n");
}
//depiler de la pile
void dep(PILE &p,element *x)
{
if(!pile_vide(p))
{
(*x)=p.t[p.sommet];
p.sommet=p.sommet-1;
}
else
printf("la pile est videeeee \n");
}
//afficher les éléments de la pile
void affich(PILE p)
{
int i;
for(i=p.sommet-1;i>=0;i--)
printf("%d\t",p.t[i]);
printf("\n");
}
//programme principale
int main()
{
int i;
element x;
initialiser(p);
emp(p,2);
emp(p,3);
emp(p,4);
emp(p,5);
affich(p);
printf("le nombre d'element de la pile est %d \n",p.sommet);
if(p.sommet==0)
printf("la pile est vide \n");
else
printf("la pile est remplie par des elements \n");
dep(p, &x);
printf("%d\n",x);
//dep(p,2);
//affich(p);
getch();
return 0;
} |
bon voila tous mon code , l'empilement ca marche trés bien par contre le depilement pas du ttt,
merci pour votrev attention.
revisitez la gestion de votre pointeur de pile!
Bonjour,
Code:
1 2 3 4 5 6 7 8 9
| void emp(PILE *p,element x)
{
if(!pile_pleine(p)) //avec la modif ci-dessus de pile_pleine
{
p->t[p->sommet]=x;
p->sommet++;
}
else printf("la pile est pleine \n");
} |
p->sommet n'est pas l'indice du sommet de la pile mais +1
L'opération inverse (dépiler) doit décrémenter "avant" de récupérer la valeur pointée par p->t[p->sommet]
Code:
1 2 3 4 5 6 7 8 9 10 11
| void dep(PILE *p,element * x) // x est l'adresse où on va placer le résultat
{
if(!pile_vide(p))
{
p->sommet--;
*x=p->t[p->sommet];// *x, désigne l'objet à l'adresse x
}
else
printf("la pile est videeeee \n");
} |
-W
Synthèse et Tests Unitaires
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
#include <stdio.h>
/* nombre d'élément que la pile peut supporter */
#ifdef TEST
#define MAXP 3
#else
/* nobmre d'élément que la pile peut supporter */
#define MAXP 100
#endif
typedef int element;
typedef struct pile
{
element t[MAXP];
int sommet;
}
PILE;
int pile_vide (PILE const *p)
{
return p->sommet == 0;
}
/* teste si la pile est pleine ou pas */
int pile_pleine (PILE const *p)
{
return p->sommet >= MAXP;
}
int empile (PILE * p, element x)
{
int full = pile_pleine (p);
/* avec la modif ci-dessus de pile_pleine */
if (!full)
{
p->t[p->sommet] = x;
p->sommet++;
}
return full;
}
/* x est l'adresse où on va placer le résultat */
int depile (PILE * p, element * x)
{
int empty = pile_vide (p);
if (!empty)
{
p->sommet--;
/* *x, désigne l'objet à l'adresse x */
*x = p->t[p->sommet];
}
return empty;
}
/* afficher les éléments de la pile */
void affiche (PILE const *p)
{
if (pile_vide (p))
{
printf ("VIDE\n");
}
else
{
int i;
for (i = p->sommet - 1; i >= 0; i--)
{
printf ("%8d", p->t[i]);
}
printf ("\n");
if (pile_pleine (p))
{
printf ("PLEINE\n");
}
}
}
#ifdef TEST
#include <assert.h>
int main (void)
{
PILE p = { {0} };
assert (pile_vide (&p) == 1);
assert (pile_pleine (&p) == 0);
affiche (&p);
{
int full = empile (&p, 1);
assert (full == 0);
assert (pile_vide (&p) == 0);
assert (pile_pleine (&p) == 0);
affiche (&p);
}
{
int full = empile (&p, 2);
assert (full == 0);
assert (pile_vide (&p) == 0);
assert (pile_pleine (&p) == 0);
affiche (&p);
}
{
int full = empile (&p, 3);
assert (full == 0);
assert (pile_vide (&p) == 0);
assert (pile_pleine (&p) == 1);
affiche (&p);
}
{
int full = empile (&p, 4);
assert (full == 1);
assert (pile_vide (&p) == 0);
assert (pile_pleine (&p) == 1);
affiche (&p);
}
{
int data;
int empty = depile (&p, &data);
assert (empty == 0);
assert (data == 3);
assert (pile_vide (&p) == 0);
assert (pile_pleine (&p) == 0);
affiche (&p);
}
{
int data;
int empty = depile (&p, &data);
assert (empty == 0);
assert (data == 2);
assert (pile_vide (&p) == 0);
assert (pile_pleine (&p) == 0);
affiche (&p);
}
{
int data;
int empty = depile (&p, &data);
assert (empty == 0);
assert (data == 1);
assert (pile_vide (&p) == 1);
assert (pile_pleine (&p) == 0);
affiche (&p);
}
{
int data;
int empty = depile (&p, &data);
assert (empty == 1);
assert (pile_vide (&p) == 1);
assert (pile_pleine (&p) == 0);
affiche (&p);
}
puts ("P A S S E D");
return 0;
}
#endif |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
VIDE
1
2 1
3 2 1
PLEINE
3 2 1
PLEINE
2 1
1
VIDE
VIDE
P A S S E D
Process returned 0 (0x0) execution time : 0.025 s
Press any key to continue. |