Académique Documents
Professionnel Documents
Culture Documents
INTRODUCTION
➢Une pile (stack en anglais) est une liste dans laquelle l’insertion ou
la suppression se fait toujours à partir de la même extrémité appelée
sommet de la pile.
CARACTERISTIQUES GENERALES
2
Fct A
UTILISATION
IMPLEMENTATIONS
Implémentation dynamique par une liste chaînée
Une pile en dynamique n'a pas de taille limite, hormis celle de la mémoire
centrale (RAM) disponible.
4
pointp
LES PILES
5
LES PILES
void vider()
{pointp=0;}
pointp
int pile_pleine()
{return(pointp==Max);} x
int pile_vide()
{return(pointp==0);}
6
LES PILES
int premier_pile()
max-1
{ return(pile[pointp-1]);}
Int/void depiler()
{pointp--;
return(pile[pointp]);
} pointp
void empiler(int x) x
{pile[pointp]=x;
pointp++;
}
7
LES PILES
8
LES PILES
int pilevide(pile p)
{return(p==NULL);}
9
LES PILES
int premier_pile(pile p)
{ return(p->val);}
10
LES PILES
printf("\nRemplissage de la pile\n\n");
for(i=0;i<n;i++)
{ printf("saisir une valeur dans la pile :");scanf("%d",&valeur);
empiler(valeur,&p);
}
printf("\n Vider la pile\n\n");
while(!pile_vide(p)) {printf("VALEUR = %d\n",depiler(&p));}
printf("\n");
return 0;
}
11
LES FILES
REPRESENTATION INTUITIVE
12
LES FILES
Exemples :
➢Gestion d’accès à une ressource informatique : en système les files sont utilisées
pour gérer tous les processus en attente de ressource système
➢D'une façon générale, la notion de file intervient dans un modèle dès qu'il est
question d'une file d'attente : systèmes de réservation, gestion de pistes d'aéroport
……etc.
Opérations :
Tete(F) : retourne l’élément en tête de F
Queue(F) : retourne l’élément en fin de F
Enfiler(x,F) : insère l’élément x à la fin de la file F
Defiler(F) : supprime le premier élément de la file F
13
LES FILES
➢ Une file est une liste dont on conserve en permanence le premier élément qui
représente la tête de la file et le dernier élément qui représente la queue de la file.
➢ Elle est définie par deux pointeurs :
dernier : pointeur sur la queue pour enfiler les éléments
premier : pointeur sur la tête pour défiler les éléments
➢ A part cette spécificité c'est un cas normal de liste chainée
➢En dynamique une file n'a pas de taille limite, hormis celle de la mémoire centrale
(RAM) disponible.
14
LES FILES
tete Queue
premier Dernier
int filevide(pfile f)
{return f->dernier==NULL;} 1
15
LES FILES
1
IMPLEMENTATION PAR POINTEURS
}
pelem creer(int a) {
x =(pelem)malloc(sizeof(struct elem)) ;
x ->val=a ;
x->suiv=NULL;
return x;} 16
LES FILES
premier
1
dernier
17
LES FILES
a
18
LES FILES
20
LES FILES
IMPLEMENTATION PAR UN TABLEAU (TABLEAU SIMPLE)
Tete Queue Tete Queue
(
(5)
( (
(6) (7)
on ne peut plus ajouter d’éléments dans la file alors qu’elle n’est pas pleine 21
LES FILES
IMPLEMENTATION PAR TABLEAU (TABLEAU SIMPLE AVEC DECALAGE)
20
(
(5)
( (
(6) (7)
23
LES FILES
➢la file est pleine lorsque la tête et la queue coïncident ce qui représente la
même condition quand la file est vide : il est clair que cette situation n’est pas
satisfaisante.
➢une solution consiste à laisser au moins l’espace d’un élément entre la tête et la
queue : si la taille de la file est de 100 par exemple, il faudra réserver un tableau à
101 éléments.
➢Le champ dernier (par exemple) correspond à la position libre suivante pour le
prochain arrivant
➢la file est pleine si le dernier élément retrouve le premier dans le tableau
circulaire après un tour complet en partant de n'importe quelle position
24
LES FILES
int file_vide(pfile f)
{
return f->dernier==f->premier;
}
int file_pleine(pfile f)
{
return ((f->dernier+1)%Nbmax == f->premier) ;
}
25
LES FILES
typelt defiler(pfile f)
{
typelt x;
x=f->tab[f->premier];
f->premier=(f->premier+1)%Nbmax;
return x;
}
26
LES ARBRES
GENERALITES
27
LES ARBRES
N
DEFINITION N1 Nk
A1 Ak
28
LES ARBRES
TERMINOLOGIE
29
LES ARBRES
TERMINOLOGIE
30
LES ARBRES
TERMINOLOGIE
31
LES ARBRES
N
TERMINOLOGIE
N1 Nk
➢Notion d’ordre
A1 Ak
➢Tout sommet est la racine d’un arbre formé par sa descendance et lui-même
➢Les fils d’un sommet ne sont pas dans un ordre arbitraire et dans ce cas, on
parlera de fils aîné, cadet, etc .. l’ordre étant de gauche à droite dans une
représentation « standard »
➢ d +(s) « degré sortant » est le nombre de fils du sommet s
➢ d -(s) « degré entant » est le nombre de pères du sommet s
N.B: Ʃ d +(s) = Ʃ d- (s) = a = n-1
où a et le nombre d’arcs et n le nombre de sommets père
feuille 32
➢ d +(s) « degré sortant » est le nombre de fils du sommet s
n=1 Taille=n
feuille
33
LES ARBRES
arbre binaire
Possibilité de passer d’un arbre n-aire à un arbre binaire grâce aux primitives Premier
fils (PF) et Frère Droit (FD) ou Premier frère (FR)
3-aire
PF PF
FD ou FR FD ou FR
struct nœud {
typelt info ;
struct nœud *PF ;
struct nœud *FR ;} ;
typedef struct nœud *arbre ;
34
LES ARBRES
PARCOURS D’ARBRES
➢ Parcours en profondeur
Parcourir un arbre en profondeur consiste à visiter ses
nœuds en descendant le plus profondément possible dans
l’arbre.
Lorsque l’on arrive sur un arbre vide, on remonte jusqu’au
nœud supérieur et on redescend dans le fils encore
inexploré
➢ Parcours en largeur
On explore chaque noeud d'un niveau donné de gauche à
droite, puis on passe au niveau suivant.
35
LES ARBRES
PARCOURS D’ARBRES
J K
Parcours en largeur : A B C D E F G H J K I
Parcours en profondeur : A B E F G B C D H J K I H D A
36
Exemple
Largeur : A B C D E F G H I
Profondeur : A B E F G B C H I C D A
37
LES ARBRES
PARCOURS EN PROFONDEUR
Parcours en profondeur : A B E F G B C D H J K I H D A
Début
x racine
Repeter
Si x a un fils alors x Premier_fils(x) G
Sinon x A
Debut B J K
Tque x n’a pas de frère et x ≠ racine faire E
F
x père(x) G
Fintque B
C
Si x≠ racine alors x Frère_droit (x) D
Fin H
Jusqu’à x=racine J
K
Fin I
H
D
N.B : tant que et non Si car ce dernier conduit à une boucle infinie ( ex : du côté duA H) 38