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
   | #include <fstream>
#include <iostream>
using namespace std;
#include "Pile.hpp"
 
/**
 * @brief Créer une pile vide
 * la pile est allouée en mémoire dynamique
 * elle est à désallouer (cf. detruire) en fin dutilisation
 * @param[in,out] p : la pile à créer (vide)
 * @param[in] c : capacité de la pile (nb maximum ditems stockés)
 * @pre aucune (la pile peut déjà être crée ou non)
 * @post p est vide  
 */
void creer(Pile& p, unsigned int c) {
	p.tab = new Item[c];
	p.sommet = -1;
	p.capacite = c;
}
 
/**
 * @brief Agrandir la pile
 * la pile est allouée en mémoire dynamique
 * elle est à désallouer (cf. detruire) en fin dutilisation
 * @param[in,out] p : la pile à agrandir(pleine)
 * @param[in] c : capacité de la pile (nb maximum ditems stockés)
 * @pre aucune (la pile doit etre pleine)
 * @post p est pleine  
 */
void agrandir(Pile & p, unsigned int c) {
	Item* newItem;
	p.capacite++;
	newItem = new Item[p.capacite];
 
	for(unsigned int i=0; i < p.capacite; i++) {
		newItem[i]= p.tab[i];
	}
 
	detruire(p);
	p.tab = newItem;
	p.capacite++;
 
}
/**
 * @brief Désallouer une pile
 * la pile a été créée (cf. creer)
 * @param[in,out] p : la pile concernée
 */
void detruire(Pile& p) {
	delete [] p.tab;
	p.tab = NULL;
}
 
/**
 * @brief Test de pile pleine
 * la pile a été créée (cf. creer)
 * @param[in] p : la pile testée
 * @return true si p est pleine, false sinon
 */
bool estPleine(const Pile& p) {
	return (p.sommet == (p.capacite-1));
}
 
/**
 * @brief Test de pile vide_ 
 * la pile a été créée (cf. creer)
 * @param[in] p : la pile testée
 * @return true si p est vide, false sinon
 */
bool estVide(const Pile& p) {
	return (p.sommet == -1);
}
 
/**
 * @brief Lire l'item au sommet de la pile_ * la pile a été créée (cf. creer)
 * @param[in] p : la pile concernée
 * @return la valeur de l'item au sommet de pile
 * @pre la pile nest pas vide
 */
Item sommet(const Pile& p) {
	return p.tab[p.sommet];
}
 
/**
 * @brief Empiler un item sur la pile
 * la pile a été créée (cf. creer)
 * @param[in,out] p : la pile concernée
 * @param[in] it : l'item à empiler
 * @pre p nest pas pleine
 * @post p nest pas vide, it est le sommet de p
 */
void empiler(Pile& p, Item it) {
	if(!estPleine(p)) {
		agrandir(p, 1);
	}
	p.sommet++;
	p.tab[p.sommet] = it;
}
 
/**
 * @brief Dépiler litem sommet de pile
 * la pile a été créée (cf. creer)
 * @param[in,out] p : la pile concernée
 * @pre p nest pas vide
 */
void depiler(Pile& p) {
	assert(!estVide(p));
	p.sommet--;
} | 
Partager