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