Forum Clubic

Incrémentation, décrémentation et pile

Bonjour,
On trouve dans mon cours ce code pour obtenir une pile fonctionnelle :

OBJET espace[MAXPILE];
int nombreElements = 0;

? opération empiler la valeur de x " :

if (nombreElements >= MAXPILE)
erreur(“tentative d?empilement dans une pile pleine”);
espace[nombreElements++] = x;

? opération dépiler une valeur et la ranger dans x " :

if (nombreElements <= 0)
erreur(“tentative de depilement d?une pile vide”);
x = espace[–nombreElements];

Et bien je ne le comprend pas. Pour empiler j’aurai mis espace[++nombreElements] = x et pour dépiler x = espace[nombreElements–].

Il est dit dans le cours juste avant que:

L?affectation y = x++; équivaut à y = x; x = x + 1;
De meme y = ++x; équivaut à x = x + 1; y = x;

donc le code me fait penser que pour empiler il faut placer la valeur de x dans la valeur max de la pile avant incrémentation, or ce n’est pas logique car cet emplacement est déjà occupé par une autre valeur! Pareil pour le dépilage, le code fait décrémenter avant d’avoir mis la valeur du sommet de pile dans x. Donc c’est l’avant-dernière valeur de la pile qui est placée dans x. Pouvez-vous m’aider s’il-vous-plait?

Si tu as x valeurs dans ta pile, elles sont stockées dans espace[0] à espace[x-1]
Donc tu mets bien la suivante dans espace[x] avant d’incrémenter le x en question.

Super! C’est ce qu’il me manquait pour comprendre. Merci!