Vous êtes sur la page 1sur 31

Partie 2: Les structures de donnes

Chapitre3:

1
1

A: Les piles
dpiler : retrait la tte Empiler: ajout la tte
2

1/ Dfinition: La pile est une liste ordonne dlments dans laquelle on ne peut introduire ou enlever un lment qu' une extrmit. Cette extrmit est appele tte de pile ou sommet de pile.

Toutes les oprations sont effectues sur la mme extrmit =>LIFO.


Ex: Dans un navigateur, une pile sert mmoriser les pages Web visites. L'adresse de chaque nouvelle page visite est empile. L'utilisateur dpile en cliquant le bouton page prcdente . Idem pour annuler dernier frappe

Bout ferm

2/ Oprations courantes: A/ Les piles Empiler, Dpiler.


Une pile est une liste pour laquelle on peut : Ajouter un lment au dbut = empiler l'lment = le mettre au sommet de la pile ==> fonction PUSH Supprimer un lment du dbut = dpiler l' lment = l'enlever du sommet ==> fonction POP tester si la pile est vide,etc MAIS laquelle on ne peut: Ni ajouter un lment la fin; ni au milieu; Ni supprimer un lment la fin; ni du au milieu.

Il ny a pas de limite au nombre dlments quon peut empiler pour une implmentation par liste chane. Par contre, on ne peut dpiler dune pile vide.
EX: Utiliser une fonction PileVide(p) qui retourne VRAI si la pile est vide sinon FAUX.
3

3/ Insertion/suppression d'un lment la fin/milieu On procde par une succession de dpilement/empilement


Ex: Suppression de l'entier 5 d'une pile d'entiers 7 6 5 4 3 2 1 6 5 4 3 2 1 5 4 3 2 1 4 3 2 1 6 4 3 2 1 7 6 4 3 2 1

Dpiler

Dpiler

Dpiler

Empiler

Empiler
4

4/ Implmentation d'une pile


Une pile est une liste + Une liste s'implmente de 2 faons=> 2 faons pour la pile aussi

Une reprsentation par un tableau: Stockage contige dans la mmoire taille maximale dfinie d'avance. Une variable supplmentaire pour stocker l'indice du sommet,
Une reprsentation par liste chane: taille de la pile peut tre modifie Le maillon possde un lien vers l'lment prcdent, Un pointeur sur le premier lment dsigne la pile et reprsente le sommet de cette pile Une pile vide est reprsente par le pointeur NULL ,
Maillon typique

Structure mapile{ type1 nomvariable1; type2 nomvariable2; . structure mapile *prcdent; } ;


5

5/ Ex. d'oprations courantes sur les piles


Fonction Argument(s) Retour

Pilevide : teste si une pile est vide sommet: permet de consulter l'lment situ au sommet ! n'a pas de sens si pile vide empiler : ajoute un lment dans la pile

Pile Pile

Boolen Elment

Pile , Elment

Pile

dpiler : enlve l'lment situ au sommet. ! n'a pas de sens si pile vide

Pile

Pile

Elment peut tre un entier, une chane, une structure, . selon la dfinition du maillon qui constitue la pile Les algorithmes sont des exemples, et ne sont pas uniques. Ils sont adapter au modle de structure nnonc dans vos exercices

6/ Consulter le sommet d'une pile Algorithme fonction sommet E: structure maillon * mapile S: entier R ----------------------------------Dbut Si (mapile == NULL) afficher (rien afficher!); retourner NULL ; Sinon R = mapile->contenu; retourner R; FinSI

Ex: Ecrire l'algorithme d'une fonction sommet, retournant la valeur du sommet d'une pile d'entiers

Fin
7

7/ Fonction empiler
Principe Crer un nouvel lment , y mettre les donnes. Faire pointer ce nouvel lment sur la pile. Retourner le pointeur sur ce nouvel lment
Analogue Ajouter en tte d'une liste chane

Pour un maillon de type: structure maillon { entier contenu; structure maillon * prcdent; }; La fonction empiler serait = >

Algorithme fonction empiler E: structure maillon *p, entier x S: structure maillon *p ------------------------------------------Dbut structure maillon * nv; nv->contenu=x; nv->prcdent=p; retourner nv;
Fin
8

8/ Fonction dpiler (avec retour de l'adresse du nv sommet) Algorithme fonction dpiler E: structure maillon *p S: structure maillon *p ------------------------------------------Dbut Si (p=NULL)alors Afficher("rien dpiler!"); retourner NULL; sinon structure maillon * t = p; Question: Est-il ncessaire de faire une p=p->precedent; copie du sommet (i)? Librer(t); retourner p; Finsi 9/ Fonction ViderPile Fin Dduire l'algorithme d'une fonction qui permet de vider toute la pile.

Principe Vrifier que la pile n'est pas vide Copier le sommet dans une variable auxiliaire Faire pointer le pointeur pile sur l'avant dernier lment Librer le sommet

Exercice: Pour une pile d'entiers, traduire en langage c les fonctions pilevide, sommet, dpiler, empiler. struct maillon { int valeur; struct maillon *precedent; }; typedef struct maillon maillon;
10 20

mapile

typedef maillon *Pile;

50

NULL

Les (typedef) ne sont pas obligatoires!

11

Des exemple de solutions.

int pilevide(Pile p){ if (p==NULL) return 0; else return 1;

Pile empiler(Pile p, int e) { Cellule * pc; pc=(maillon *)malloc(sizeof(maillon)); pc->valeur=e; pc->suivant=p; return pc; } Pile depiler(Pile p) { if (pilevide(p)) { printf("rien dpiler!\n"); return NULL; } else { maillon * pc = p; p=p->precedent; free(pc); return p; }}
12

int sommet(Pile p) { if (pilevide(p)) printf("Erreur: pile vide !"); else return p->valeur; }

Ne pas oublier de crer le tout premier pointeur avant d'essayer d'empiler

// dfinition du modle de structure //dfinition des fonctions prcdentes .. main () { Pile mapile = NULL;

Faut crer "la premiere brique" Quel est le type de mapile?

mapile = empiler(mapile,50); mapile = empiler(mapile,5); mapile = empiler(mapile,20); printf("%d est au sommet\n", sommet(mapile)); mapile = depiler(mapile); mapile = depiler(mapile); printf("%d est au sommet\n", sommet(mapile)); }
13

B/ Les files
1/ Dfinition: Une file est une liste dans laquelle on insre des nouveaux lments la fin (queue) et o on enlve des lments au dbut (tte de file).
A B C D E F

dfiler : retrait la tte

Enfiler: ajout la fin

le premier lment insr est aussi le premier retir. Accs FIFO (First In Fist Out).

14

2/ex. d'oprations courantes A/ Les piles sur les files: Enfiler, dfiler
Une file est une liste pour laquelle on peut par exemple: Ajouter un lment la fin = enfiler l'lment = le mettre la fin de la file Supprimer un lment du dbut = dfiler l' lment = l'enlever de la tte Tester si la file est vide, MAIS laquelle on ne peut: Ni ajouter un lment au dbut; Ni ajouter un lment au milieu; Ni supprimer un lment la fin; Ni supprimer un lment au milieu. y a-t-il une limite au nombre dlments quon peut enfiler/ dfiler?

!
15

Comme pour les piles, l'insertion/suppression => une succession d'oprations dfiler/enfiler.

3/ 3/Implmentation Implmentation d'une des files file


Une file est une liste + Une liste s'implmente de 2 faons=> 2 faons pour la file aussi

Une reprsentation par un tableau Les lments de la file sont rangs dans un tableau Stockage contige sur la mmoire. Deux entiers reprsentent les positions de la tte/la queue de la file Une reprsentation par liste chane: Le maillon possde un lien vers l'lment suivant, Un pointeur tte pointant sur le premier lment dsigne la file et reprsente la tte de cette file Un pointeur queue pointant sur le dernier lment reprsente la queue de cette file
les maillons chans +

Il faudra donc: pointeur sur la tte +pointeur sur la queue


Peuvent tre groups dans une structure
16

Implmentation d'une file (suite)


Les algorithmes qui suivront sont crits pour le maillon ci dessous. Les maillons tte et queue sont groups dans une structure File.

structure maillon { entier contenu; structure maillon * suivant; }; structure File { structure maillon *tete; structure maillon *queue; }; File f; f n'est pas un pointeur On crira f.tete=... f.queue=

Un maillon contient un lment et un pointeur sur l'lment suivant, il constituera la file

type File : structure deux champs (pointeurs de tte et de queue de file) N'appartient pas la file elle-mme, Faudra mettre jour les valeurs contenues dans cette structure chaque ajout/retrait
17

4/ Ex. d'oprations courantes sur les piles


Fonction filevide: teste si une file est vide Argument(s) file Retour Boolen Elment

tte: permet de consulter l'lment situ file en tte de file ; ! n'a pas de sens si la file vide enfiler : ajoute un lment la file dfiler :enlve l'lment situ la tte. ! n'a pas de sens si file vide file , Elment file

file file

Tout comme pour les piles: Elment peut tre un entier, une chane, une structure, . selon la dfinition du maillon qui constitue la file Les algorithmes sont des exemples, et ne sont pas uniques.
18

5/ Fonction Crer une file vide


On ne cre pas les maillons. Seule la structure File (tte+queue ) est initialiser

6/ Fonction filevide
Une file est vide est si les deux pointeurs tte et Queue sont NULL.

Algorithme fonction filevide Algorithme fonction creefilevide E: structure File f S: entier. E: Rien ----------------------------------------------S: structure File f Dbut ------------------------------------Dbut Si (f.tete=NULL) et (f.queue=NULL) File f; //cre alors f.tete=NULL; //initialise retourner 0; f.queue=NULL; Sinon retourner 1 retourner f; Finsi fin fin
19

7/ Fonction enfiler
Algorithme fonction enfiler E: structure File f, entier x S: structure File f Dbut structure maillon * nv; nv->contenu=x; nv->suivant=NULL; si(filevide(f)) f.tete=f.queue=nv; Sinon (f.queue)->suivant=nv; f.queue=nv; Finsi retourner f; Fin

//Crer un nouvel lment , //Y mettre les donnes.

//pointer sur NULL puisqu'il devient le dernier.


// vide tte=queue=cet lment unique

//le dernier devient avant dernier, avant nv //mise jour: queue est maintenant nv

20

8/ Fonction dfiler (avec retour de l'adresse du nv sommet) Algorithme fonction dfiler E: structure File f, S: structure File f Dbut Si (filevide(f)) alors Afficher("rien dfiler!"); retourner NULL; sinon Structure maillon * tmp;
tmp=f.tete; f.tete=(f.tete) -> suivant; librer (tmp); si (f.tete=NULL) alors f.queue=NULL; finsi retourner f; Finsi; Fin
//on copie la tete // la tte est maintenant le second lment

// et si ce maillon dfil tait le seul dans //cette file? // faudrait mettre queue NULL aussi //retourner f puisqu'elle fut modifie
21

C/ LES ARBRES
1/ Dfinition d'un arbre: un arbre est un graphe acyclique orient possdant une unique racine, et tel que tous les nuds -sauf la racine- ont un unique parent.
Un arbre est une structure arborescente compose dlments appels nuds ; Chaque nud est constitu : dun champ de donne ; dun ou plusieurs pointeurs vers des nuds. Un arbre est donc une racine et une suite (ventuellement vide) de sous arbres A1, , An. Il existe un unique chemin allant de la racine a n'importe quel nud de l'arborescence. La donne du pointeur sur le nud racine dfini tout l'arbre, tout comme la donne de l'adresse de la tte d'une liste chane dfinit toute la liste
22

2/ Terminologie
un noeud interne est un nud qui a au moins un fils une feuille dun arbre est un nud sans fils ; dite aussi une extrmit; les anctres dun nud a sont les nuds qui sont sur le chemin entre la racine (incluse) et a (inclus) ; les descendants dun noeud a sont les nuds qui appartiennent au sous-arbre de racine a ;
Ex: Les feuilles de l'arbre ct sont: Les nuds internes sont: Les anctres de 13 sont: Les anctres propres de 13 (cd 13 non inclus) sont:
23

la profondeur dun nud est la longueur du chemin allant de la racine ce nud Longueur dsigne
La profondeur de la racine est donc nulle la profondeur dun nud autre que la racine vaut =1+ la profondeur de son pre; Un niveau est un ensemble de nuds internes ou de feuilles situs la mme profondeur (5 et 20 par ex) la hauteur dun arbre: profondeur maximum des nuds ; elle vaut dans cet exemple 4 Un arbre est dit quilibr, si les les sous-arbres gauche et droit ont des hauteurs qui diffrent au plus de 1
24

les liens et non pas les nuds

3/ Arbre binaire de recherche (un exemple d'arbres)


Conditions: les nuds appartiennent un ensemble totalement ordonn. Binaire => Chaque nud a au plus 2 nuds les donnes contenues dans le sous arbre gauche de tout nud interne a sont infrieures ou gales la donne contenue dans le nud a lui mme, qui est son tour infrieure ou gale aux donnes contenues dans le sous-arbre droit de a.

2 <5

5 <10

16 <20

Fils Gauche < nud < fils droit


26

Ex: est ce un arbre binaire de recherche?

Cet arbre est il binaire? Si oui, est ce un ABR? Est il quilibr? Fils Gauche < nud < fils droit
27

4/ Implmentation d'un arbre (ex.)


La structure lmentaire utilise pour construire l'arbre peut tre l'une des suivantes: Les donnes (valeurs contenues dans le nud), Un lien vers chaque nud fils, Un arbre vide permet de caractriser les feuilles. Les donnes Un lien vers le premier nud fils (fils gauche gnralement), Un lien vers le nud frre (premier nud frre sur la droite). Les donnes Un lien vers le nud pre, puisque chaque nud possde UN pre.

TAF: Dessiner un schma illustratif des ces trois exemples


28

5/ Implmentation d'un arbre (Exemple)


Structure noeud { entier contenu; Structure nud Structure nud }; structure nud * arbre ; arbre->contenu=2; arbre->fils_gauche->contenu=7; arbre->fils_droit->contenu=5; arbre->fils_gauche->fils_gauche->contenu=2; arbre->fils_droit->fils_gauche->contenu=8; arbre->fils_gauche->fils_droit->contenu=6; arbre->fils_droit->fils_droit->contenu=3;
29

* fils_gauche; * fils_droit;

Schmatiser cet arbre. Est-ce un ABR? Est un arbre quilibr?

6/ Exemple d'oprations: la Taille de larbre


Ecrire une fonction rcursive taille qui calcule le nombre de nuds darbre. Si larbre est vide, la fonction retourne 0. Si larbre contient au moins un noeud, la fonction retourne la somme des tailles du sous-arbre gauche et du sous-arbre droit plus 1 Algorithme fonction taille E: structure nud * arbre S: entier -------------------------------------Dbut structure nud * t = arbre; Si(t=NULL) alors Retourner 0 Sinon retourner 1 + taille(t->fils_gauche) + taille(t->fils_droit); Finsi fin
30

7/ Parcours d'un arbre


Le parcours d'un arbre peut se faire de diffrentes faon. En largeur En profondeur a. En prfixe b. En suffixe c. En infixe Parcours en largeur Le parcours en largeur correspond un parcours par niveau de nuds de l'arbre. = > 2-7-5-2-6-9-5-11-4
RMQ: Ces exemples -valables pour un arbre binaire- sont gnraliser au cas d'arbres n-aires
31

Parcours en profondeur
Le parcours en pr ordre, dit aussi en ordre prfixe. Lire la racine ; parcourir en pr ordre le premier sous-arbre;. parcourir en pr ordre le dernier sous-arbre. => 2 7 2 6 5 11 5 9 4 :racine en premier

Le parcours en post ordre, dit aussi en ordre suffixe: parcourir en le premier sous-arbre ;.. parcourir en le dernier sous-arbre ; Lire la racine. => 2 5 11 6 7 4 9 5 2 :racine en dernier
Parcours en ordre infixe: Traiter le fils gauche, le nud courant , puis le fils droit.. => 2 7 5 6 11 2 5 4 9
32

Ex: De quel type de parcours s'agit-il dans cette figure?


En profondeur/ Pr ordre

FIN
33