Chapitre 7 - Conteneurs : pile, file, map, sac, ensemble
Définition
On distingue les conteneurs qui mémorise l’ordre : pile, file Des conteneurs de valeur : map, sac, ensemble
Exemple : map (dictionnaire)
Définition
Une map est un objet qui mémorise des couples ((cle, valeur)) avec la contrainte suivante il ne peut mémoriser deux couples différents ayant la même valeur de clé.
Pour implanter une map de telle façon que les operations 'associer' et "getValue" soient efficace on peut utiliser par exemple une table de hachage ou un arbre binaire de recherche.
Illustration :
\(\{3 \rightarrow "le \; nombre \; 3";\)
\(1 \rightarrow "le \; premier"; \times\)
\(1 \rightarrow "prems" \}\)
En C (prototypes) :
typedef...{
...}map_t
void initMap(map_t * m);
void freeMap(map_t * m);
int associerMap(map_t * m, const char * cle, const char * valeur);
const char * getValue(map_t * m, const char * cle);
Exemple d'utilisation en C :
map_t maMap; // dictionnaire
initMap(&maMap); // {}
associerMap(&maMap, "stylo", "outil pour ecrire");
// {"stylo" → "outil pour ecrire"};
associerMap(&maMap, "ballon", "objet spherique");
// {"stylo" → "outil pour ecrire" ; "ballon" → "objet spherique"}
const char * c = getValue(&maMap, "stylo"); // c = "outil pour ecrire"
associerMap(&maMap, "stylo", "abrev. de stylographe");
// {"stylo" → "abrev de stylographe" ; "ballon" → "objet spherique"}
freeMap(&maMap);
La pile
Définition
Dans une pile on a deux operations :
-
ajouter un objet à la pile (empiler)
-
retirer un objet de la pile (dépiler)
Si on retire un objet de la pile on retire forcément celui qui est le plus "récent"
LIFO : Last In First Out (dernier entrée premier sorti)
La file
Définition
Comme dans une pile, on a deux opérations :
- ajouter un objet dans la file (enfiler)
- retirer un objet d'une file (défiler)
à la différence d'une pile si on retire un objet, on retire forcément le plus "ancien"
FIFO : First In First Out (Premier entrée premier sorti)
Exemple : pile et file
Pile
pile_t * p = initPile();
empiler(p, 1);
empiler(p,2);
int r1 = depiler(p); // 2
int r2 = depiler(p); // 1
libererPile(p);
File
file_t * f = initFile();
enfiler(p,1);
enfiler(p,2);
int r1 = depiler(p); // 1
int r2 = depiler(p); // 2
libererFile(f);
Implantation pile avec tableau
| 1 | 3 | 7 | 1 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| base de la pile | sommet de la pile |
taille max = 14
Implantation de pile avec liste chainée

Implantation de file avec tableau
(de gauche a droite)
| 5 | 2 | 2 | 1 | 7 | ||
|---|---|---|---|---|---|---|
| tête de file | queue de file |
taille max = 7