3ème année GIIE-FID
Pile et File
Mohamed El yaakoubi
Pile
La pile est une structure de données, qui permet de stocker les données dans l'ordre LIFO (Last
In First Out) - en français Dernier Entré Premier Sorti).
La récupération des données sera faite dans l'ordre inverse de leur insertion.
Le fonctionnement est celui d'une pile d'assiettes : on ajoute des assiettes sur la pile, et on les
récupère dans l'ordre inverse, en commençant par la dernière ajoutée.
Les opérations qu’on peut faire sur une pile :
• Retourner l'élément au sommet de la pile
• Empiler un élément au sommet de la pile.
• Dépiler et délivrer l'élément au sommet de la pile p. La nouvelle pile est
aussi délivrée.
Modélisation par tableau
Généralement, il y a deux façons de représenter une pile. La première s'appuie sur la structure de
liste chaînée. La seconde manière utilise un tableau.
struct Pile {
ELEMENT tab[NMAX];
int n;
};
Modélisation par tableau
NMAX
n
n
Modélisation par liste chainée
• Pour l'implémentation, nous avons choisi une liste simplement chaînée, présentée sur la
verticale.
• L'insertion se faisant toujours au début de la liste, le 1er élément de la liste sera le dernier
élément saisi, donc sa position est en haut de la pile
• Ce qui nous intéresse c'est que le dernier élément entré, sera le 1er élément récupéré.
struct node {
int data; struct Stack{
node *next; node *top;
}; int size;
};
Empiler une donnée dans la pile
Stack *push(Stack *stack,int data)
{
node *other = new node();
other->data=data;
other->next = stack->top;
stack->top=other;
stack->size++;
return stack
}
Dépiler une donnée dans la pile
int pop(Stack *stack)
{
if(stack->top==NULL)
{
cout << "Empty stack ...." << endl;
exit(-1);
}
else {
int data;
node *tmp = stack->top;
data = tmp->data;
stack->top = tmp->next;
stack->size--;
delete(tmp);
return data;
}
}
int top(Stack *stack){
if(stack->top==NULL)
{
cout << "Empty stack ...." << endl;
exit(-1);
}
else
return stack->top->data;
}
File
La file est une structure de données, qui permet de stocker les données dans l'ordre FIFO (First
In First Out) - en français Premier Entré Premier Sorti).
Pour l'implémentation, on a choisi une liste simplement chaînée. L'insertion dans la file se fera
dans l'ordre normal, le 1er élément de la file sera le premier élément saisi, donc sa position est
au début de la file.
Pour avoir le contrôle de la file, il est préférable de sauvegarder certains éléments : le premier élément, le dernier
élément, le nombre d'éléments.
struct File{
node *first;
node *last;
};
File *push(File *file,int data){
node *other = new node();
other->data=data;
if(file->last==NULL)
{
file->first=other;
file->last=other;
}
else {
file->last->next=other;
file->last=other ;
}
return file;
}
int pop(File *file){
if(file->top==NULL)
{
cout << "enpty file ..." << endl;
exit(-1);
}
else{
int data= file->first->data;
node *tmp=file->first;
file->first=tmp->next;
if(file->first==NULL)
file->last=NULL;
delete(tmp);
return data;
}
}