Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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.
Bout ferm
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
Dpiler
Dpiler
Dpiler
Empiler
Empiler
4
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
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
50
NULL
11
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; }
// dfinition du modle de structure //dfinition des fonctions prcdentes .. main () { Pile mapile = NULL;
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
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.
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 +
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=
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
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
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
//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
2 <5
5 <10
16 <20
Cet arbre est il binaire? Si oui, est ce un ABR? Est il quilibr? Fils Gauche < nud < fils droit
27
* fils_gauche; * fils_droit;
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
FIN
33