![Page 1: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/1.jpg)
Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 118 novembre 20068 novembre 2006
Cours d’AlgorithmiqueCours d’Algorithmique
Listes, piles et files.Listes, piles et files.
Arbres.Arbres.
Types de données abstraits.Types de données abstraits.
Implantations.Implantations.
![Page 2: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/2.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 22
• Trier et chercherTrier et chercher• Listes et arbresListes et arbres• Le back-trackLe back-track• Arbres équilibrésArbres équilibrés• Récursivité et induction sur la structureRécursivité et induction sur la structure• Divide and conquerDivide and conquer• MinimaxMinimax• DérécursionDérécursion• Divers problèmes particuliersDivers problèmes particuliers• Logique de HoareLogique de Hoare• Programmation dynamiqueProgrammation dynamique• Complexité et calculabilitéComplexité et calculabilité
Les grandes lignes du coursLes grandes lignes du cours
![Page 3: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/3.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 33
Voici des listes !Voici des listes !
22 22 1144
00 22 44 66 88 1010
2244 22 1122 -1-166 1010
44
TableauTableau
![Page 4: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/4.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 44
22 22 1144
00 22 44 66 88 1010
2244 22 1122 -1-166 1010
44
TableauTableau
Voici des listes !Voici des listes !
![Page 5: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/5.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 55
Voici des listes !Voici des listes !
22 22 1144
00 22 44 66 88 1010
2244 22 1122 -1-166 1010
44
TableauTableau
![Page 6: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/6.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 66
Voici des listes !Voici des listes !
22 22 1144
00 22 44 66 88 1010
2244 22 1122 -1-166 1010
44
TableauTableau
![Page 7: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/7.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 77
Voici des listes !Voici des listes !
22 22 1144
00 22 44 66 88 1010
2244 22 1122 -1-166 1010
44
TableauTableau
![Page 8: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/8.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 88
Voici des listes !Voici des listes !
22 22 1144
00 22 44 66 88 1010
2244 22 1122 -1-166 1010
44
TableauTableau
FINFIN
![Page 9: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/9.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 99
Caractérisations d’une liste !Caractérisations d’une liste !
• Un élément plus un lien vers le suivant.Un élément plus un lien vers le suivant.
• Séquence ordonnée finie.Séquence ordonnée finie.– Suite ordonnée des mathématiques.Suite ordonnée des mathématiques.
• Un tableau peut être vu comme une liste, si on limite les Un tableau peut être vu comme une liste, si on limite les accès aléatoires.accès aléatoires.– On lit T[0], puis T[1], etc, par exemple.On lit T[0], puis T[1], etc, par exemple.
• Une liste est caractérisée parUne liste est caractérisée par– ses propriétés et fonctions d’accèsses propriétés et fonctions d’accès– et non sa réalisation.et non sa réalisation.
![Page 10: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/10.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1010
Constructeurs et prédicats sur listesConstructeurs et prédicats sur listes----------------------------------------------------------------------------------------------------------------------------------
Soit Soit LTLT le type des listes d’éléments de type le type des listes d’éléments de type TT..
Le constructeur de la liste vide :Le constructeur de la liste vide :
cree_vide : void ->cree_vide : void -> LTLT
![Page 11: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/11.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1111
Constructeurs et prédicats sur listesConstructeurs et prédicats sur listes----------------------------------------------------------------------------------------------------------------------------------
Soit Soit LTLT le type des listes d’éléments de type le type des listes d’éléments de type TT..
Le constructeur de la liste vide :Le constructeur de la liste vide :
cree_vide : void -> cree_vide : void -> LTLT
Le constructeur général :Le constructeur général :
ajout_liste : ajout_liste : T T x x LTLT -> -> LTLT
![Page 12: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/12.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1212
Constructeurs et prédicats sur listesConstructeurs et prédicats sur listes----------------------------------------------------------------------------------------------------------------------------------
Soit Soit LTLT le type des listes d’éléments de type le type des listes d’éléments de type TT..
Le constructeur de la liste vide :Le constructeur de la liste vide :
cree_vide : void -> cree_vide : void -> LTLT
Le constructeur général :Le constructeur général :
ajout_liste : ajout_liste : T T x x LTLT -> -> LTLT
Le prédicat qui distingue les deux cas Le prédicat qui distingue les deux cas ::
est_vide : est_vide : LTLT -> BOOL -> BOOL
![Page 13: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/13.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1313
Constructeurs et prédicats sur listesConstructeurs et prédicats sur listes----------------------------------------------------------------------------------------------------------------------------------
Les propriétés vérifiées par ces fonctions :Les propriétés vérifiées par ces fonctions :
est_videest_vide ( cree_vide () ) = ( cree_vide () ) = VraiVrai
est_vide ( ajout_liste ( e , l ) ) = est_vide ( ajout_liste ( e , l ) ) = FauxFaux
• La seule liste vide est celle créée par « cree_vide ».La seule liste vide est celle créée par « cree_vide ».
• Aucune liste obtenue par adjonction d’un élément « a » Aucune liste obtenue par adjonction d’un élément « a » à une liste « l » n’est vide.à une liste « l » n’est vide.
• Salutations de la part de Monsieur de la Palisse !Salutations de la part de Monsieur de la Palisse !
![Page 14: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/14.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1414
Fonctions d’accès sur listesFonctions d’accès sur listes----------------------------------------------------------------------------------------------------------------------------------
La fonction d’accès à l’élément :La fonction d’accès à l’élément :
tete_liste : tete_liste : LTLT -> -> TT
La fonction d’accès à la suite de la La fonction d’accès à la suite de la liste :liste :
queue_liste : queue_liste : LTLT -> -> LTLT
![Page 15: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/15.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1515
Fonctions d’accès sur listesFonctions d’accès sur listes----------------------------------------------------------------------------------------------------------------------------------
La fonction d’accès à l’élément :La fonction d’accès à l’élément :
tete_liste : tete_liste : LTLT -> -> TT
La fonction d’accès à la suite de la La fonction d’accès à la suite de la liste :liste :
queue_liste : queue_liste : LTLT -> -> LTLTLes propriétés vérifiées par ces fonctions :Les propriétés vérifiées par ces fonctions :
tete_listetete_liste ( ajout_liste ( a , l ) ) = ( ajout_liste ( a , l ) ) = a a
queue_listequeue_liste ( ajout_liste ( a , l ) ) ( ajout_liste ( a , l ) ) = l= l
![Page 16: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/16.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1616
Fonctions d’accès sur listesFonctions d’accès sur listes----------------------------------------------------------------------------------------------------------------------------------
Les limitations d’application de ces fonctions,Les limitations d’application de ces fonctions,les appels suivants sont interdits :les appels suivants sont interdits :
tete_listetete_liste ( cree_vide () )( cree_vide () )
queue_listequeue_liste ( cree_vide () )( cree_vide () )
![Page 17: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/17.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1717
Fonctions d’accès sur listesFonctions d’accès sur listes----------------------------------------------------------------------------------------------------------------------------------
Les limitations d’application de ces fonctions,Les limitations d’application de ces fonctions,les appels suivants sont interdits :les appels suivants sont interdits :
tete_listetete_liste ( cree_vide () )( cree_vide () )
queue_listequeue_liste ( cree_vide () )( cree_vide () )
Ce qui est vraiment caractéristique d’une liste Ce qui est vraiment caractéristique d’une liste ::
tete_listetete_liste ( ajout_liste ( a , l ) ) = ( ajout_liste ( a , l ) ) = a a
![Page 18: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/18.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1818
Fonctions d’accès sur listesFonctions d’accès sur listes----------------------------------------------------------------------------------------------------------------------------------
Les limitations d’application de ces fonctions,Les limitations d’application de ces fonctions,les appels suivants sont interdits :les appels suivants sont interdits :
tete_listetete_liste ( cree_vide () )( cree_vide () )
queue_listequeue_liste ( cree_vide () )( cree_vide () )
On parle d’une structureOn parle d’une structure
Ce qui est vraiment caractéristique d’une liste Ce qui est vraiment caractéristique d’une liste ::
tete_listetete_liste ( ajout_liste ( a , l ) ) = ( ajout_liste ( a , l ) ) = a a
LLast ast IIn - n - FFirst irst OOut ut (LIFO)(LIFO)
![Page 19: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/19.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 1919
Types de données abstraitsTypes de données abstraits----------------------------------------------------------------------------------------------------------------------------------
• Nous nous sommes donné des noms de types :Nous nous sommes donné des noms de types :– un type de base un type de base T T,,– un type de liste un type de liste LT LT sur ce type de base.sur ce type de base.
![Page 20: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/20.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2020
Types de données abstraitsTypes de données abstraits----------------------------------------------------------------------------------------------------------------------------------
• Nous nous sommes donné des noms de types :Nous nous sommes donné des noms de types :– un type de base un type de base T T,,– un type de liste un type de liste LT LT sur ce type de base.sur ce type de base.
• Nous nous sommes donné des fonctions et leurs propriétés :Nous nous sommes donné des fonctions et leurs propriétés :– cree_vide , ... ,cree_vide , ... ,– est_vide ( cree_vide () ) = Vrai , … .est_vide ( cree_vide () ) = Vrai , … .
![Page 21: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/21.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2121
Types de données abstraitsTypes de données abstraits----------------------------------------------------------------------------------------------------------------------------------
• Nous nous sommes donné des noms de types :Nous nous sommes donné des noms de types :– un type de base un type de base T T,,– un type de liste un type de liste LT LT sur ce type de base.sur ce type de base.
• Nous nous sommes donné des fonctions et leurs propriétés :Nous nous sommes donné des fonctions et leurs propriétés :– cree_vide , ... ,cree_vide , ... ,– est_vide ( cree_vide () ) = Vrai , … .est_vide ( cree_vide () ) = Vrai , … .
• Nous n’avons pas besoin de devenir plus concrets.Nous n’avons pas besoin de devenir plus concrets.
![Page 22: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/22.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2222
Types de données abstraitsTypes de données abstraits----------------------------------------------------------------------------------------------------------------------------------
• Nous nous sommes donné des noms de types :Nous nous sommes donné des noms de types :– un type de base un type de base T T,,– un type de liste un type de liste LT LT sur ce type de base.sur ce type de base.
• Nous nous sommes donné des fonctions et leurs propriétés :Nous nous sommes donné des fonctions et leurs propriétés :– cree_vide , ... ,cree_vide , ... ,– est_vide ( cree_vide () ) = Vrai , … .est_vide ( cree_vide () ) = Vrai , … .
• Nous n’avons pas besoin de devenir plus concrets.Nous n’avons pas besoin de devenir plus concrets.
C’est un C’est un type de données abstrait.type de données abstrait.
![Page 23: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/23.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2323
Exemple d’implantationExemple d’implantation----------------------------------------------------------------------------------------------------------------------------------
22 11ajout_listeajout_liste ( ( 55 , , ) )
22 1155
ajout_listeajout_liste ( ( 55 , , cree_vide cree_vide ()() ) )
55
![Page 24: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/24.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2424
Exemple d’implantationExemple d’implantation----------------------------------------------------------------------------------------------------------------------------------
22 11
tete_listetete_liste ( )( )
22 1155
5
queue_listequeue_liste ( ( ) )
22 1155
![Page 25: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/25.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2525
L I S T E S L I S T E S E TE T
P I L E S ! ! !P I L E S ! ! !
Listes et pilesListes et piles----------------------------------------------------------------------------------------------------------------------------------
![Page 26: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/26.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2626
Listes et pilesListes et piles----------------------------------------------------------------------------------------------------------------------------------
22 1155
![Page 27: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/27.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2727
Listes et pilesListes et piles----------------------------------------------------------------------------------------------------------------------------------
22 1155
22
11
55
![Page 28: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/28.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2828
Listes et pilesListes et piles----------------------------------------------------------------------------------------------------------------------------------
22 1155
22
11
55
Pile ( d’assiettes )Pile ( d’assiettes )stack en anglaisstack en anglais
![Page 29: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/29.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 2929
Listes et pilesListes et piles----------------------------------------------------------------------------------------------------------------------------------
22 1155
22
11
55
Pile ( d’assiettes )Pile ( d’assiettes )stack en anglaisstack en anglais
ajout_liste = push = ajout_liste = push = empilerempiler
tete_liste = top = sommettete_liste = top = sommet
queue_liste = pop = queue_liste = pop = dépilerdépiler
![Page 30: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/30.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3030
Listes et pilesListes et piles----------------------------------------------------------------------------------------------------------------------------------
22 1155
22
11
55
Pile ( d’assiettes )Pile ( d’assiettes )stack en anglaisstack en anglais
ajout_liste = push = ajout_liste = push = empilerempiler
tete_liste = top = sommettete_liste = top = sommet
queue_liste = pop = queue_liste = pop = dépilerdépiler
LIFO !LIFO !
![Page 31: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/31.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3131
Listes et piles : les différencesListes et piles : les différences----------------------------------------------------------------------------------------------------------------------------------
• Les piles sont restreintes aux opérations :Les piles sont restreintes aux opérations :– top , pop et push ( et la détection de la pile vide ),top , pop et push ( et la détection de la pile vide ),– celles-ci sont réalisées de façon efficace dans le celles-ci sont réalisées de façon efficace dans le
processeur,processeur,– par le biais d’un tableau !!!par le biais d’un tableau !!!
![Page 32: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/32.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3232
Listes et piles : les différencesListes et piles : les différences----------------------------------------------------------------------------------------------------------------------------------
• Les piles sont restreintes aux opérations :Les piles sont restreintes aux opérations :– top , pop et push ( et la détection de la pile vide ),top , pop et push ( et la détection de la pile vide ),– celles-ci sont réalisées de façon efficace dans le processeur,celles-ci sont réalisées de façon efficace dans le processeur,– par le biais d’un tableau !!!par le biais d’un tableau !!!
• Les listes peuvent comporter entre autres :Les listes peuvent comporter entre autres :– en plus de ajout_liste , tete_liste et queue_liste (+ liste vide),en plus de ajout_liste , tete_liste et queue_liste (+ liste vide),– des fonctions comme inserer_liste , supprimer_liste, … ,des fonctions comme inserer_liste , supprimer_liste, … ,– être doublement chaînées ( cf. TD ) ou circulaires,être doublement chaînées ( cf. TD ) ou circulaires,– et ne sont plus des tableaux !et ne sont plus des tableaux !
![Page 33: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/33.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3333
Listes et piles : les différencesListes et piles : les différences----------------------------------------------------------------------------------------------------------------------------------
• Les piles sont restreintes aux opérations :Les piles sont restreintes aux opérations :– top , pop et push ( et la détection de la pile vide ),top , pop et push ( et la détection de la pile vide ),– celles-ci sont réalisées de façon efficace dans le processeur,celles-ci sont réalisées de façon efficace dans le processeur,– par le biais d’un tableau !!!par le biais d’un tableau !!!
• Les listes peuvent comporter entre autres :Les listes peuvent comporter entre autres :– en plus de ajout_liste , tete_liste et queue_liste (+ liste vide),en plus de ajout_liste , tete_liste et queue_liste (+ liste vide),– des fonctions comme inserer_liste , supprimer_liste, … ,des fonctions comme inserer_liste , supprimer_liste, … ,– être doublement chaînées ( cf. TD ) ou circulaires,être doublement chaînées ( cf. TD ) ou circulaires,– et ne sont plus des tableaux !et ne sont plus des tableaux !
22 66 44
![Page 34: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/34.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3434
Listes et piles : les différencesListes et piles : les différences----------------------------------------------------------------------------------------------------------------------------------
• Les piles sont restreintes aux opérations :Les piles sont restreintes aux opérations :– top , pop et push ( et la détection de la pile vide ),top , pop et push ( et la détection de la pile vide ),– celles-ci sont réalisées de façon efficace dans le processeur,celles-ci sont réalisées de façon efficace dans le processeur,– par le biais d’un tableau !!!par le biais d’un tableau !!!
• Les listes peuvent comporter entre autres :Les listes peuvent comporter entre autres :– en plus de ajout_liste , tete_liste et queue_liste (+ liste vide),en plus de ajout_liste , tete_liste et queue_liste (+ liste vide),– des fonctions comme inserer_liste , supprimer_liste, … ,des fonctions comme inserer_liste , supprimer_liste, … ,– être doublement chaînées ( cf. TD ) ou circulaires,être doublement chaînées ( cf. TD ) ou circulaires,– et ne sont plus des tableaux !et ne sont plus des tableaux !
22 66 44
![Page 35: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/35.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3535
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <assert.h>
typedef int type_base;
typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; }t_maillon, *ptr_liste;
![Page 36: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/36.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3636
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <assert.h>
typedef int type_base;
typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; }t_maillon, *ptr_liste;
Le nom du type de base.Le nom du type de base.
![Page 37: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/37.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3737
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <assert.h>
typedef int type_base;
typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; }t_maillon, *ptr_liste;
Le nom du type de base.Le nom du type de base.
La structure elle-même.La structure elle-même.
![Page 38: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/38.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3838
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <assert.h>
typedef int type_base;
typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; }t_maillon, *ptr_liste;
Le nom du type de base.Le nom du type de base.
La structure elle-même.La structure elle-même.
La structure s’appelle t_maillon.La structure s’appelle t_maillon.
![Page 39: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/39.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 3939
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <assert.h>
typedef int type_base;
typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; }t_maillon, *ptr_liste;
Le nom du type de baseLe nom du type de base
La structure elle-mêmeLa structure elle-même
La structure s’appelle t_maillon.La structure s’appelle t_maillon.
Le type du pointeur sur une tellestructure s’appelle ptr_liste.
![Page 40: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/40.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4040
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
S o y o n s S o y o n s p l u sp l u s
c o n c r e t s !!!c o n c r e t s !!!
![Page 41: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/41.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4141
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
int est_vide (ptr_liste liste)
{ return( liste == (ptr_liste)NULL ); }
type_base tete_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->valeur ); }
ptr_liste queue_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->suivant ); }
![Page 42: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/42.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4242
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
int est_vide (ptr_liste liste)
{ return( liste == (ptr_liste)NULL ); }
type_base tete_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->valeur ); }
ptr_liste queue_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->suivant ); }
Création de la liste vide.Création de la liste vide.
![Page 43: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/43.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4343
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
int est_vide (ptr_liste liste)
{ return( liste == (ptr_liste)NULL ); }
type_base tete_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->valeur ); }
ptr_liste queue_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->suivant ); }
Création de la liste vide.Création de la liste vide.
Le prédicat de listeLe prédicat de liste vide ou non.vide ou non.
![Page 44: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/44.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4444
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
int est_vide (ptr_liste liste)
{ return( liste == (ptr_liste)NULL ); }
type_base tete_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->valeur ); }
ptr_liste queue_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->suivant ); }
Création de la liste vide.Création de la liste vide.
Le prédicat de listeLe prédicat de liste vide ou non.vide ou non.
Rendre la tête d’uneliste non vide.
![Page 45: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/45.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4545
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
int est_vide (ptr_liste liste)
{ return( liste == (ptr_liste)NULL ); }
type_base tete_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->valeur ); }
ptr_liste queue_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->suivant ); }
Création de la liste vide.Création de la liste vide.
Le prédicat de listeLe prédicat de liste vide ou non.vide ou non.
Rendre la tête d’uneliste non vide.
On s’assure que la liste n’estOn s’assure que la liste n’estpas la liste vide.pas la liste vide.
Préférable : Préférable :
( liste != cree_vide() ) ( liste != cree_vide() )
![Page 46: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/46.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4646
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
int est_vide (ptr_liste liste)
{ return( liste == (ptr_liste)NULL ); }
type_base tete_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->valeur ); }
ptr_liste queue_liste (ptr_liste liste)
{assert( liste != (ptr_liste)NULL );
return( liste->suivant ); }
Création de la liste vide.Création de la liste vide.
Le prédicat de listeLe prédicat de liste vide ou non.vide ou non.
Rendre la tête d’uneliste non vide.
Rendre la queueRendre la queued’une liste non vide.d’une liste non vide.
![Page 47: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/47.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4747
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_liste (type_base elt, ptr_liste liste)
{ptr_liste ptr_auxil;
ptr_auxil = (ptr_liste)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = liste;
return( ptr_auxil );}
![Page 48: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/48.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4848
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_liste (type_base elt, ptr_liste liste)
{ptr_liste ptr_auxil;
ptr_auxil = (ptr_liste)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = liste;
return( ptr_auxil );}
ptr_liste ??? ???
![Page 49: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/49.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 4949
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_liste (type_base elt, ptr_liste liste)
{ptr_liste ptr_auxil;
ptr_auxil = (ptr_liste)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = liste;
return( ptr_auxil );}
ptr_liste elt ???
![Page 50: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/50.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5050
Listes en langage CListes en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_liste (type_base elt, ptr_liste liste)
{ptr_liste ptr_auxil;
ptr_auxil = (ptr_liste)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = liste;
return( ptr_auxil );}
ptr_liste elt liste
![Page 51: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/51.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5151
Compilation séparéeCompilation séparée----------------------------------------------------------------------------------------------------------------------------------
C O M P I L A T I O N C O M P I L A T I O N
S E P A R E ES E P A R E E
![Page 52: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/52.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5252
Exporter les types --- fichier adt_liste.cExporter les types --- fichier adt_liste.c----------------------------------------------------------------------------------------------------------------------------------
...#include <assert.h>
typedef int type_base;typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; } t_maillon, *ptr_liste;
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
...
![Page 53: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/53.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5353
Exporter les types --- fichier adt_liste.cExporter les types --- fichier adt_liste.c----------------------------------------------------------------------------------------------------------------------------------
...#include <assert.h>
typedef int type_base;typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; } t_maillon, *ptr_liste;
ptr_liste cree_vide (void);int est_vide (ptr_liste liste);ptr_liste ajout_liste (type_base elt, ptr_liste liste);type_base tete_liste (ptr_liste liste);ptr_liste queue_liste (ptr_liste liste);
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
...
Nous inséronsNous inséronsles prototypes.les prototypes.
![Page 54: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/54.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5454
Exporter les types --- fichier adt_liste.cExporter les types --- fichier adt_liste.c----------------------------------------------------------------------------------------------------------------------------------
...#include <assert.h>
typedef int type_base;typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; } t_maillon, *ptr_liste;
ptr_liste cree_vide (void);int est_vide (ptr_liste liste);ptr_liste ajout_liste (type_base elt, ptr_liste liste);type_base tete_liste (ptr_liste liste);ptr_liste queue_liste (ptr_liste liste);
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
...
type_liste.h
#include ‘’type_liste.h ’’
![Page 55: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/55.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5555
Exporter les types --- fichier adt_liste.cExporter les types --- fichier adt_liste.c----------------------------------------------------------------------------------------------------------------------------------
...#include <assert.h>
typedef int type_base;typedef struct moi_meme {type_base valeur; struct moi_meme *suivant; } t_maillon, *ptr_liste;
ptr_liste cree_vide (void);int est_vide (ptr_liste liste);ptr_liste ajout_liste (type_base elt, ptr_liste liste);type_base tete_liste (ptr_liste liste);ptr_liste queue_liste (ptr_liste liste);
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
...
type_liste.h
#include ‘’type_liste.h ’’
adt_liste.h
#include ‘’adt_liste.h’’
![Page 56: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/56.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5656
Exporter les types --- fichier adt_liste.cExporter les types --- fichier adt_liste.c----------------------------------------------------------------------------------------------------------------------------------
...#include <assert.h>
#include ‘’type_liste.h’’
#include ‘’adt_liste.h’’
ptr_liste cree_vide (void)
{ return( (ptr_liste)NULL ); }
...
Les définitions viennent ici !Les définitions viennent ici !
Le fichier adt_liste.cLe fichier adt_liste.c
![Page 57: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/57.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5757
prog.c qui utilise le type de données liste :prog.c qui utilise le type de données liste :----------------------------------------------------------------------------------------------------------------------------------
...#include <assert.h>
#include ‘’type_liste.h’’
#include ‘’adt_liste.h’’
int main (void)...
L’utilisateur voit la structureL’utilisateur voit la structuredu type de liste.du type de liste.
L’utilisateur voit les signaturesL’utilisateur voit les signaturesdes fonctions sur les listes.des fonctions sur les listes.
![Page 58: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/58.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5858
prog.c qui utilise le type de données liste :prog.c qui utilise le type de données liste :----------------------------------------------------------------------------------------------------------------------------------
...#include <assert.h>
#include ‘’type_liste.h’’
#include ‘’adt_liste.h’’
int main (void)...
L’utilisateur voit la structureL’utilisateur voit la structuredu type de liste.du type de liste.
L’utilisateur voit les signaturesL’utilisateur voit les signaturesdes fonctions sur les listes.des fonctions sur les listes.
L’utilisateur ne voit pas la réalisation desL’utilisateur ne voit pas la réalisation desfonctions, c’est-à-dire le contenu de adt_liste.c !fonctions, c’est-à-dire le contenu de adt_liste.c !
Souvent, c’est mieux fait dans d’autres langagesSouvent, c’est mieux fait dans d’autres langagescomme Ada , Modula , C++ et plein d’autres.comme Ada , Modula , C++ et plein d’autres.
![Page 59: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/59.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 5959
Compilation séparéeCompilation séparée----------------------------------------------------------------------------------------------------------------------------------
• gcc –o executable prog.cgcc –o executable prog.c– On ne peut pas générer l’exécutable.On ne peut pas générer l’exécutable.– On connaît les signatures des fonctions sur les listes.On connaît les signatures des fonctions sur les listes.– Mais, on ne connaît pas leurs réalisations !Mais, on ne connaît pas leurs réalisations !
![Page 60: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/60.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6060
Compilation séparéeCompilation séparée----------------------------------------------------------------------------------------------------------------------------------
• gcc –o executable prog.cgcc –o executable prog.c– On ne peut pas générer l’exécutable.On ne peut pas générer l’exécutable.– On connaît les signatures des fonctions sur les listes.On connaît les signatures des fonctions sur les listes.– Mais, on ne connaît pas leurs réalisations !Mais, on ne connaît pas leurs réalisations !
• gcc –o executable prog.c adt_liste.cgcc –o executable prog.c adt_liste.c– On peut compiler les deux fichiers en même temps.On peut compiler les deux fichiers en même temps.
![Page 61: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/61.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6161
Compilation séparéeCompilation séparée----------------------------------------------------------------------------------------------------------------------------------
• gcc –o executable prog.cgcc –o executable prog.c– On ne peut pas générer l’exécutable.On ne peut pas générer l’exécutable.– On connaît les signatures des fonctions sur les listes.On connaît les signatures des fonctions sur les listes.– Mais, on ne connaît pas leurs réalisations !Mais, on ne connaît pas leurs réalisations !
• gcc –o executable prog.c adt_liste.cgcc –o executable prog.c adt_liste.c– On peut compiler les deux fichiers en même temps.On peut compiler les deux fichiers en même temps.
• gcc gcc –c–c prog.c prog.c– Nous compilons prog.c pour générer « prog.o » .Nous compilons prog.c pour générer « prog.o » .– Nous n’avons pas besoin des définitions sur les listes, car Nous n’avons pas besoin des définitions sur les listes, car
nous ne créons pas encore l’exécutable.nous ne créons pas encore l’exécutable.– De même, gcc De même, gcc –c–c adt_liste.c crée « adt_liste.o ». adt_liste.c crée « adt_liste.o ».
![Page 62: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/62.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6262
Compilation séparéeCompilation séparée----------------------------------------------------------------------------------------------------------------------------------
• gcc –o executable prog.cgcc –o executable prog.c– On ne peut pas générer l’exécutable.On ne peut pas générer l’exécutable.– On connaît les signatures des fonctions sur les listes.On connaît les signatures des fonctions sur les listes.– Mais, on ne connaît pas leurs réalisations !Mais, on ne connaît pas leurs réalisations !
• gcc –o executable prog.c adt_liste.cgcc –o executable prog.c adt_liste.c– On peut compiler les deux fichiers en même temps.On peut compiler les deux fichiers en même temps.
• gcc gcc –c–c prog.c prog.c– Nous compilons prog.c pour générer « prog.o » .Nous compilons prog.c pour générer « prog.o » .– Nous n’avons pas besoin des définitions sur les listes, car Nous n’avons pas besoin des définitions sur les listes, car
nous ne créons pas encore l’exécutable.nous ne créons pas encore l’exécutable.– De même, gcc De même, gcc –c–c adt_liste.c crée « adt_liste.o ». adt_liste.c crée « adt_liste.o ».
• gcc –o executable prog.o adt_liste.ogcc –o executable prog.o adt_liste.o
![Page 63: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/63.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6363
Les fichiers .hLes fichiers .h----------------------------------------------------------------------------------------------------------------------------------
• Les fichiers « .h » donnent les « types » et/ou les Les fichiers « .h » donnent les « types » et/ou les « prototypes ».« prototypes ».
![Page 64: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/64.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6464
Les fichiers .hLes fichiers .h----------------------------------------------------------------------------------------------------------------------------------
• Les fichiers « .h » donnent les « types » et/ou les Les fichiers « .h » donnent les « types » et/ou les « prototypes ».« prototypes ».
• #include <file.h>#include <file.h>– file.h est cherché dans les répertoires standard,file.h est cherché dans les répertoires standard,– mais aussi dans tout répertoire indiqué par -mais aussi dans tout répertoire indiqué par -IIrép.rép.– Exemple : gcc … -Exemple : gcc … -II. -. -II../local/include …../local/include …
![Page 65: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/65.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6565
Les fichiers .hLes fichiers .h----------------------------------------------------------------------------------------------------------------------------------
• Les fichiers « .h » donnent les « types » et/ou les Les fichiers « .h » donnent les « types » et/ou les « prototypes ».« prototypes ».
• #include <file.h>#include <file.h>– file.h est cherché dans les répertoires standard,file.h est cherché dans les répertoires standard,– mais aussi dans tout répertoire indiqué par -mais aussi dans tout répertoire indiqué par -IIrép.rép.– Exemple : gcc … -Exemple : gcc … -II. -. -II../local/include …../local/include …
• #include ‘’file.h’’#include ‘’file.h’’– file.h est cherché dans le répertoire courant.file.h est cherché dans le répertoire courant.
![Page 66: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/66.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6666
Les fichiers .hLes fichiers .h----------------------------------------------------------------------------------------------------------------------------------
• Les fichiers « .h » donnent les « types » et/ou les Les fichiers « .h » donnent les « types » et/ou les « prototypes ».« prototypes ».
• #include <file.h>#include <file.h>– file.h est cherché dans les répertoires standard,file.h est cherché dans les répertoires standard,– mais aussi dans tout répertoire indiqué par -mais aussi dans tout répertoire indiqué par -IIrép.rép.– Exemple : gcc … -Exemple : gcc … -II. -. -II../local/include …../local/include …
• #include ‘’file.h’’#include ‘’file.h’’– file.h est cherché dans le répertoire courant.file.h est cherché dans le répertoire courant.
• gcc -Wmissing-prototypes …gcc -Wmissing-prototypes …– L’absence de prototypes est signalée par un avertissement.L’absence de prototypes est signalée par un avertissement.
![Page 67: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/67.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6767
Créer et utiliser les librairiesCréer et utiliser les librairies----------------------------------------------------------------------------------------------------------------------------------
• Il existe des librairies statiques, dynamiques et archives.Il existe des librairies statiques, dynamiques et archives.– « ar r libadtl.a adt_liste.o » crée la librairie « libadtl.a » « ar r libadtl.a adt_liste.o » crée la librairie « libadtl.a »
à partir du contenu de « adt_liste.o »,à partir du contenu de « adt_liste.o »,– « ar t libadtl.a » affiche le contenu de la librairie.« ar t libadtl.a » affiche le contenu de la librairie.
![Page 68: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/68.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6868
Créer et utiliser les librairiesCréer et utiliser les librairies----------------------------------------------------------------------------------------------------------------------------------
• Il existe des librairies statiques, dynamiques et archives.Il existe des librairies statiques, dynamiques et archives.– « ar r libadtl.a adt_liste.o » crée la librairie « libadtl.a » « ar r libadtl.a adt_liste.o » crée la librairie « libadtl.a »
à partir du contenu de « adt_liste.o »,à partir du contenu de « adt_liste.o »,– « ar t libadtl.a » affiche le contenu de la librairie.« ar t libadtl.a » affiche le contenu de la librairie.
• « gcc -o executable -L« gcc -o executable -L.. prog.c -l prog.c -ladtl adtl » compile prog.c» compile prog.c– Le répertoire Le répertoire .. est inspecté lors de la recherche des librairies, est inspecté lors de la recherche des librairies,– on recherche la librairie on recherche la librairie libadtl.alibadtl.a
![Page 69: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/69.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 6969
Créer et utiliser les librairiesCréer et utiliser les librairies----------------------------------------------------------------------------------------------------------------------------------
• Il existe des librairies statiques, dynamiques et archives.Il existe des librairies statiques, dynamiques et archives.– « ar r libadtl.a adt_liste.o » crée la librairie « libadtl.a » « ar r libadtl.a adt_liste.o » crée la librairie « libadtl.a »
à partir du contenu de « adt_liste.o »,à partir du contenu de « adt_liste.o »,– « ar t libadtl.a » affiche le contenu de la librairie.« ar t libadtl.a » affiche le contenu de la librairie.
• « gcc -o executable -L« gcc -o executable -L.. prog.c -l prog.c -ladtl adtl » compile prog.c» compile prog.c– Le répertoire Le répertoire .. est inspecté lors de la recherche des librairies, est inspecté lors de la recherche des librairies,– on recherche la librairie on recherche la librairie libadtl.alibadtl.a
• L’ordre des arguments importe :L’ordre des arguments importe :– OK : gcc prog-math.c -lmOK : gcc prog-math.c -lm– KO : gcc -lm prog-math.cKO : gcc -lm prog-math.c
![Page 70: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/70.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7070
L E S L E S
F I L E SF I L E S
Les filesLes files----------------------------------------------------------------------------------------------------------------------------------
![Page 71: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/71.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7171
Les filesLes files----------------------------------------------------------------------------------------------------------------------------------
• LIFO : listes et piles.LIFO : listes et piles.– Les accès en « ajout », « lecture » et « suppression » Les accès en « ajout », « lecture » et « suppression »
se font en tête de liste :se font en tête de liste :
InsertionInsertion
LectureLecture
SuppressionSuppression
…
![Page 72: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/72.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7272
Les filesLes files----------------------------------------------------------------------------------------------------------------------------------
• LIFO : listes et piles.LIFO : listes et piles.– Les accès en « ajout », « lecture » et « suppression » Les accès en « ajout », « lecture » et « suppression »
se font en tête de liste :se font en tête de liste :
InsertionInsertion
LectureLecture
SuppressionSuppression
• FIFO : files.FIFO : files.– First In – First Out, c’est plus équitable !First In – First Out, c’est plus équitable !– L’insertion se fait à la fin et c’est la seule L’insertion se fait à la fin et c’est la seule
différence.différence.
LectureLecture
SuppressionSuppression
InsertionInsertion
…
…
![Page 73: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/73.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7373
Les files en langage CLes files en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_file (type_base elt, ptr_file file)
{ptr_file ptr_auxil;
ptr_auxil = (ptr_file)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = (ptr_file)NULL;
if ( file == (ptr_file)NULL )
return( ptr_auxil );
else
{ptr_file ptr_local = file;
while ( ptr_local->suivant != (ptr_file)NULL )
ptr_local = ptr_local->suivant;
ptr_local->suivant = ptr_auxil;
return( file ); }}
![Page 74: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/74.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7474
Les files en langage CLes files en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_file (type_base elt, ptr_file file)
{ptr_file ptr_auxil;
ptr_auxil = (ptr_file)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = (ptr_file)NULL;
if ( file == (ptr_file)NULL )
return( ptr_auxil );
else
{ptr_file ptr_local = file;
while ( ptr_local->suivant != (ptr_file)NULL )
ptr_local = ptr_local->suivant;
ptr_local->suivant = ptr_auxil;
return( file ); }}
Création du nouveauCréation du nouveaumaillon qui sera le dernier.maillon qui sera le dernier.
![Page 75: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/75.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7575
Les files en langage CLes files en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_file (type_base elt, ptr_file file)
{ptr_file ptr_auxil;
ptr_auxil = (ptr_file)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = (ptr_file)NULL;
if ( file == (ptr_file)NULL )
return( ptr_auxil );
else
{ptr_file ptr_local = file;
while ( ptr_local->suivant != (ptr_file)NULL )
ptr_local = ptr_local->suivant;
ptr_local->suivant = ptr_auxil;
return( file ); }}
Il est peut-être le seul !Il est peut-être le seul !
![Page 76: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/76.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7676
Les files en langage CLes files en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_file (type_base elt, ptr_file file)
{ptr_file ptr_auxil;
ptr_auxil = (ptr_file)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = (ptr_file)NULL;
if ( file == (ptr_file)NULL )
return( ptr_auxil );
else
{ptr_file ptr_local = file;
while ( ptr_local->suivant != (ptr_file)NULL )
ptr_local = ptr_local->suivant;
ptr_local->suivant = ptr_auxil;
return( file ); }}
Nous avançons jusqu’auNous avançons jusqu’audernier maillon,dernier maillon,
![Page 77: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/77.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7777
Les files en langage CLes files en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_liste ajout_file (type_base elt, ptr_file file)
{ptr_file ptr_auxil;
ptr_auxil = (ptr_file)malloc(sizeof(t_maillon));
ptr_auxil->valeur = elt;
ptr_auxil->suivant = (ptr_file)NULL;
if ( file == (ptr_file)NULL )
return( ptr_auxil );
else
{ptr_file ptr_local = file;
while ( ptr_local->suivant != (ptr_file)NULL )
ptr_local = ptr_local->suivant;
ptr_local->suivant = ptr_auxil;
return( file ); }}
Nous chaînons etNous chaînons etrendons le résultat !rendons le résultat !
![Page 78: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/78.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7878
Les filesLes files----------------------------------------------------------------------------------------------------------------------------------
• Souvent, on maintient deux pointeurs :Souvent, on maintient deux pointeurs :
têtetête
queuequeue
…
![Page 79: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/79.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 7979
Les filesLes files----------------------------------------------------------------------------------------------------------------------------------
• Souvent, on maintient deux pointeurs :Souvent, on maintient deux pointeurs :
têtetête
queuequeue
• C’est plus pratique d’avoir une structure de synthèse :C’est plus pratique d’avoir une structure de synthèse :
filefile
…
…
![Page 80: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/80.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8080
Les arbresLes arbres----------------------------------------------------------------------------------------------------------------------------------
E TE TP O U RP O U R
T E R M I N E R ,T E R M I N E R ,L E SL E S
A R B R E S !A R B R E S !
![Page 81: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/81.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8181
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
racineracine
![Page 82: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/82.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8282
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
racineracine
Il y a un nœud qui est la « racine ».Il y a un nœud qui est la « racine ».
Il y a une orientation de laIl y a une orientation de laracine vers les autres.racine vers les autres.
![Page 83: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/83.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8383
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
autre racineautre racine
![Page 84: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/84.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8484
Les arbres NON enracinésLes arbres NON enracinés----------------------------------------------------------------------------------------------------------------------------------
Les liens sont bi-directionnels.Les liens sont bi-directionnels.
Il n’y a pas de racine.Il n’y a pas de racine.
![Page 85: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/85.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8585
Les arbres NON enracinésLes arbres NON enracinés----------------------------------------------------------------------------------------------------------------------------------
Pourquoi d’ailleurs faire laPourquoi d’ailleurs faire ladistinction entre feuillesdistinction entre feuilles
et nœuds ?et nœuds ?
C’est ainsi que nousC’est ainsi que nousverrons un arbreverrons un arbre
en théorie desen théorie desgraphes.graphes.
![Page 86: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/86.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8686
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
racineracine
Les feuilles sont les extrémités de Les feuilles sont les extrémités de l’arbre.l’arbre.
Du point de vue de l’arbre, ellesDu point de vue de l’arbre, ellessont atomiques (sanssont atomiques (sans
successeur).successeur).
Concernant l’application,Concernant l’application,elles comportentelles comportent
souvent dessouvent desvaleurs.valeurs.
5 13
![Page 87: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/87.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8787
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
racineracine
Il y a des nœuds (internes)Il y a des nœuds (internes)qui ont des « fils » enqui ont des « fils » en
nombre variable.nombre variable.
Chaque fils est à sonChaque fils est à sontour un arbre.tour un arbre.
ConcernantConcernantl’application,l’application,
les nœudsles nœudspeuventpeuvent
comportercomporterdes valeurs,des valeurs,
que l’on appelleque l’on appelleaussi des étiquettes.aussi des étiquettes.
x
+
![Page 88: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/88.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8888
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
racineracine
Sous-arbres !
![Page 89: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/89.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 8989
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
• Un arbre estUn arbre est– soit, simplement une feuille :soit, simplement une feuille :
racineracine
![Page 90: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/90.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9090
Les arbres enracinésLes arbres enracinés----------------------------------------------------------------------------------------------------------------------------------
• Un arbre estUn arbre est– soit, simplement une feuille :soit, simplement une feuille :
racineracine
– soit, un nœud (racine) avec un ou plusieurs fils qui soit, un nœud (racine) avec un ou plusieurs fils qui sont des arbres (enracinés) à leur tour :sont des arbres (enracinés) à leur tour :
racineracine
arbre arbre arbrearbre arbre arbre
![Page 91: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/91.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9191
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
• Création d’une feuille :Création d’une feuille :
– cree_feuille : void -> cree_feuille : void -> AA
– cree_feuille : int -> cree_feuille : int -> AApour créer une feuille qui comporte une valeur entière, pour créer une feuille qui comporte une valeur entière,
avec :avec :
valeur_feuille : valeur_feuille : AA -> int -> int
![Page 92: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/92.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9292
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
• Création d’une feuille :Création d’une feuille :
– cree_feuille : void -> cree_feuille : void -> AA
– cree_feuille : int -> cree_feuille : int -> AApour créer une feuille qui comporte une valeur entière, avec pour créer une feuille qui comporte une valeur entière, avec
::
valeur_feuille : valeur_feuille : AA -> int -> int
• Création d’un nœud binaire :Création d’un nœud binaire :
– cree_arbre : cree_arbre : A A x x AA -> -> AA
– cree_arbre : cree_arbre : A A x int x x int x AA -> -> AApour créer un nœud qui comporte une étiquette entière, pour créer un nœud qui comporte une étiquette entière,
avec : avec :
etiquette_arbre : etiquette_arbre : AA -> int -> int
![Page 93: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/93.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9393
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
• Distinction entre feuilles et noeuds :Distinction entre feuilles et noeuds :
– est_feuille : est_feuille : AA -> BOOL -> BOOL
est_feuille( cree_feuille() ) = Vraiest_feuille( cree_feuille() ) = Vrai
est_feuille( cree_noeud( x , y ) ) = Fauxest_feuille( cree_noeud( x , y ) ) = Faux
![Page 94: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/94.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9494
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
• Distinction entre feuilles et noeuds :Distinction entre feuilles et noeuds :
– est_feuille : est_feuille : AA -> BOOL -> BOOL
est_feuille( cree_feuille() ) = Vraiest_feuille( cree_feuille() ) = Vrai
est_feuille( cree_noeud( x , y ) ) = Fauxest_feuille( cree_noeud( x , y ) ) = Faux
• Décomposition d’un nœud binaire :Décomposition d’un nœud binaire :
– fils_gauche : fils_gauche : AA -> -> AA– fils_droit : fils_droit : AA -> -> AA
fils_gauche ( cree_arbre ( g , d ) ) = gfils_gauche ( cree_arbre ( g , d ) ) = g
fils_droit ( cree_arbre ( g , d ) ) = dfils_droit ( cree_arbre ( g , d ) ) = d
![Page 95: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/95.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9595
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
arbre_un = cree_arbre ( cree_feuille(5) , cree_feuille(7) );
arbre_deux = cree_arbre ( cree_feuille(2) ,
cree_arbre ( arbre_un ,
cree_feuille(1) ) );
arbre_trois = cree_arbre ( cree_feuille(3) , cree_feuille(7) );
arbre = cree_arbre ( arbre_deux , arbre_trois );
![Page 96: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/96.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9696
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
arbre_un = cree_arbre ( cree_feuille(5) , cree_feuille(7) );
arbre_deux = cree_arbre ( cree_feuille(2) ,
cree_arbre ( arbre_un ,
cree_feuille(1) ) );
arbre_trois = cree_arbre ( cree_feuille(3) , cree_feuille(7) );
arbre = cree_arbre ( arbre_deux , arbre_trois );
5 7
![Page 97: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/97.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9797
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
arbre_un = cree_arbre ( cree_feuille(5) , cree_feuille(7) );
arbre_deux = cree_arbre ( cree_feuille(2) ,
cree_arbre ( arbre_un ,
cree_feuille(1) ) );
arbre_trois = cree_arbre ( cree_feuille(3) , cree_feuille(7) );
arbre = cree_arbre ( arbre_deux , arbre_trois );
5 7
1
2
![Page 98: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/98.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9898
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
arbre_un = cree_arbre ( cree_feuille(5) , cree_feuille(7) );
arbre_deux = cree_arbre ( cree_feuille(2) ,
cree_arbre ( arbre_un ,
cree_feuille(1) ) );
arbre_trois = cree_arbre ( cree_feuille(3) , cree_feuille(7) );
arbre = cree_arbre ( arbre_deux , arbre_trois );
5 7
1
2 3 7
![Page 99: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/99.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 9999
Les arbres enracinés (binaires) comme ADTLes arbres enracinés (binaires) comme ADT----------------------------------------------------------------------------------------------------------------------------------
arbre_un = cree_arbre ( cree_feuille(5) , cree_feuille(7) );
arbre_deux = cree_arbre ( cree_feuille(2) ,
cree_arbre ( arbre_un ,
cree_feuille(1) ) );
arbre_trois = cree_arbre ( cree_feuille(3) , cree_feuille(7) );
arbre = cree_arbre ( arbre_deux , arbre_trois );
5 7
1
2 3 7
![Page 100: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/100.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 100100
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
• Un pointeur sur un arbre est :Un pointeur sur un arbre est :– soit, un pointeur sur une feuille,soit, un pointeur sur une feuille,– soit, un pointeur sur un nœud.soit, un pointeur sur un nœud.
![Page 101: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/101.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 101101
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
• Un pointeur sur un arbre est :Un pointeur sur un arbre est :– soit, un pointeur sur une feuille,soit, un pointeur sur une feuille,– soit, un pointeur sur un nœud.soit, un pointeur sur un nœud.
• Il faut donc une structure capable de contenir les deux :Il faut donc une structure capable de contenir les deux :– les champs d’une feuille,les champs d’une feuille,– les champs d’un nœud,les champs d’un nœud,– un indicateur booléen qui distingue les deux cas de figure.un indicateur booléen qui distingue les deux cas de figure.
![Page 102: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/102.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 102102
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
• Un pointeur sur un arbre est :Un pointeur sur un arbre est :– soit, un pointeur sur une feuille,soit, un pointeur sur une feuille,– soit, un pointeur sur un nœud.soit, un pointeur sur un nœud.
• Il faut donc une structure capable de contenir les deux :Il faut donc une structure capable de contenir les deux :– les champs d’une feuille,les champs d’une feuille,– les champs d’un nœud,les champs d’un nœud,– un indicateur booléen qui distingue les deux cas de figure.un indicateur booléen qui distingue les deux cas de figure.
• Exemple, (expressions arithmétiques) :Exemple, (expressions arithmétiques) :– toute feuille est un entier,toute feuille est un entier,– chaque nœud comporte :chaque nœud comporte :
• un opérateur parmi « + », « * » et « - »,un opérateur parmi « + », « * » et « - »,
• deux fils qui sont des sous-expressions.deux fils qui sont des sous-expressions.
![Page 103: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/103.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 103103
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
typedef struct moi_memetypedef struct moi_meme
{int est_feuille;{int est_feuille;
int valeur;int valeur;
char etiq;char etiq;
struct moi_meme *fg;struct moi_meme *fg;
struct moi_meme *fd;struct moi_meme *fd;
}}
t_arbre, *ptr_arbre;t_arbre, *ptr_arbre;
![Page 104: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/104.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 104104
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
typedef struct moi_memetypedef struct moi_meme
{{int est_feuille; vaudra VRAIint est_feuille; vaudra VRAI
int valeur; aura une int valeur; aura une valeurvaleur
char etiq;char etiq;
struct moi_meme *fg;struct moi_meme *fg;
struct moi_meme *fd;struct moi_meme *fd;
}}
t_arbre, *ptr_arbre;t_arbre, *ptr_arbre;
Si c’est une feuille …Si c’est une feuille …
![Page 105: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/105.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 105105
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
typedef struct moi_memetypedef struct moi_meme
{{int est_feuille; vaudra VRAIint est_feuille; vaudra VRAI
int valeur; aura une int valeur; aura une valeurvaleur
char etiq;char etiq;
struct moi_meme *fg;struct moi_meme *fg;
struct moi_meme *fd;struct moi_meme *fd;
}}
t_arbre, *ptr_arbre;t_arbre, *ptr_arbre;
Si c’est une feuille …Si c’est une feuille …
Ces champs n’ont simplementCes champs n’ont simplementaucun sens dans ce contexte !aucun sens dans ce contexte !
![Page 106: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/106.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 106106
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
typedef struct moi_memetypedef struct moi_meme
{{int est_feuille; vaudra FAUXint est_feuille; vaudra FAUX
int valeur;int valeur;
char etiq; aura une valeurchar etiq; aura une valeur
struct moi_meme *fg; aura une valeurstruct moi_meme *fg; aura une valeur
struct moi_meme *fd; aura une valeurstruct moi_meme *fd; aura une valeur
}}
t_arbre, *ptr_arbre;t_arbre, *ptr_arbre;
Si c’est un noeud …Si c’est un noeud …
![Page 107: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/107.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 107107
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
typedef struct moi_memetypedef struct moi_meme
{{int est_feuille; vaudra FAUXint est_feuille; vaudra FAUX
int valeur;int valeur;
char etiq; aura une valeurchar etiq; aura une valeur
struct moi_meme *fg; aura une valeurstruct moi_meme *fg; aura une valeur
struct moi_meme *fd; aura une valeurstruct moi_meme *fd; aura une valeur
}}
t_arbre, *ptr_arbre;t_arbre, *ptr_arbre;
Si c’est un noeud …Si c’est un noeud …
Le champ « valeur » n’a simplementLe champ « valeur » n’a simplementaucun sens dans ce contexte !aucun sens dans ce contexte !
![Page 108: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/108.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 108108
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
typedef struct moi_memetypedef struct moi_meme
{{int est_feuille; vaudra FAUXint est_feuille; vaudra FAUX
int valeur;int valeur;
char etiq; aura une valeurchar etiq; aura une valeur
struct moi_meme *fg; aura une valeurstruct moi_meme *fg; aura une valeur
struct moi_meme *fd; aura une valeurstruct moi_meme *fd; aura une valeur
}}
t_arbre, *ptr_arbre;t_arbre, *ptr_arbre;
Si c’est un noeud …Si c’est un noeud …
Le champ « valeur » n’a simplementLe champ « valeur » n’a simplementaucun sens dans ce contexte !aucun sens dans ce contexte !
En Pascal, ADA et d’autres, il existe des structures variables !En Pascal, ADA et d’autres, il existe des structures variables !
![Page 109: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/109.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 109109
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
int est_feuille (ptr_arbre arbre)int est_feuille (ptr_arbre arbre)
{return(arbre->est_feuille);{return(arbre->est_feuille);
}}
ptr_arbre cree_feuille (int val)ptr_arbre cree_feuille (int val)
{ptr_arbre arbre;{ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->est_feuille = 1;arbre->est_feuille = 1;
arbre->valeur = val;arbre->valeur = val;
return(arbre);return(arbre);
}}
![Page 110: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/110.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 110110
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
int est_feuille (ptr_arbre arbre)int est_feuille (ptr_arbre arbre)
{return(arbre->est_feuille);{return(arbre->est_feuille);
}}
ptr_arbre cree_feuille (int val)ptr_arbre cree_feuille (int val)
{ptr_arbre arbre;{ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->est_feuille = 1;arbre->est_feuille = 1;
arbre->valeur = val;arbre->valeur = val;
return(arbre);return(arbre);
}}
C’est précisément un champ quiC’est précisément un champ qui mémorise si c’est une feuille.mémorise si c’est une feuille.
![Page 111: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/111.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 111111
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
int est_feuille (ptr_arbre arbre)int est_feuille (ptr_arbre arbre)
{return(arbre->est_feuille);{return(arbre->est_feuille);
}}
ptr_arbre cree_feuille (int val)ptr_arbre cree_feuille (int val)
{ptr_arbre arbre;{ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->est_feuille = 1;arbre->est_feuille = 1;
arbre->valeur = val;arbre->valeur = val;
return(arbre);return(arbre);
}}
L’allocation de la mémoire.L’allocation de la mémoire.
Définition des champs concernés.Définition des champs concernés.
![Page 112: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/112.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 112112
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_arbre cree_noeud (ptr_arbre fg, ptr_arbre fd, char ptr_arbre cree_noeud (ptr_arbre fg, ptr_arbre fd, char symbole)symbole)
{ptr_arbre arbre;{ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->est_feuille = 0;arbre->est_feuille = 0;
arbre->etiq = symbole;arbre->etiq = symbole;
arbre->fg = fg;arbre->fg = fg;
arbre->fd = fd;arbre->fd = fd;
return(arbre);return(arbre);
}}
![Page 113: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/113.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 113113
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_arbre cree_noeud (ptr_arbre fg, ptr_arbre fd, char ptr_arbre cree_noeud (ptr_arbre fg, ptr_arbre fd, char symbole)symbole)
{ptr_arbre arbre;{ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->est_feuille = 0;arbre->est_feuille = 0;
arbre->etiq = symbole;arbre->etiq = symbole;
arbre->fg = fg;arbre->fg = fg;
arbre->fd = fd;arbre->fd = fd;
return(arbre);return(arbre);
}}
L’allocation de la mémoire.L’allocation de la mémoire.
Définition des champs concernés.Définition des champs concernés.
![Page 114: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/114.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 114114
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_arbre fils_gauche (ptr_arbre arbre)ptr_arbre fils_gauche (ptr_arbre arbre)
{assert( !est_feuille(arbre) );{assert( !est_feuille(arbre) );
return(arbre->fg);return(arbre->fg);
}}
ptr_arbre fils_droit (ptr_arbre arbre)ptr_arbre fils_droit (ptr_arbre arbre)
{assert( !est_feuille(arbre) );{assert( !est_feuille(arbre) );
return(arbre->fd);return(arbre->fd);
}}
![Page 115: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/115.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 115115
Les arbres en langage CLes arbres en langage C----------------------------------------------------------------------------------------------------------------------------------
ptr_arbre fils_gauche (ptr_arbre arbre)ptr_arbre fils_gauche (ptr_arbre arbre)
{{assert( !est_feuille(arbre) );assert( !est_feuille(arbre) );
return(arbre->fg);return(arbre->fg);
}}
ptr_arbre fils_droit (ptr_arbre arbre)ptr_arbre fils_droit (ptr_arbre arbre)
{{assert( !est_feuille(arbre) );assert( !est_feuille(arbre) );
return(arbre->fd);return(arbre->fd);
}}
Vérification que l’arbre estVérification que l’arbre estbien un nœud interne.bien un nœud interne.
Retour du résultat demandé.Retour du résultat demandé.
![Page 116: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/116.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 116116
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Une liste peut être vide !Une liste peut être vide !
• Elle sera représentée par le pointeur NULL !Elle sera représentée par le pointeur NULL !
• La raison profonde est le fait que l’opération de base est :La raison profonde est le fait que l’opération de base est :– la concaténation,la concaténation,– qui est associativequi est associative– et possède la liste vide comme élément neutre !et possède la liste vide comme élément neutre !
![Page 117: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/117.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 117117
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Une liste peut être vide !Une liste peut être vide !
• Elle sera représentée par le pointeur NULL !Elle sera représentée par le pointeur NULL !
• La raison profonde est le fait que l’opération de base est :La raison profonde est le fait que l’opération de base est :– la concaténation,la concaténation,– qui est associativequi est associative– et possède la liste vide comme élément neutre !et possède la liste vide comme élément neutre !
• Nous avons les fonctions suivantes :Nous avons les fonctions suivantes :
– cree_videcree_vide– ajout_listeajout_liste– est_videest_vide– tete_listetete_liste– queue_listequeue_liste
![Page 118: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/118.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 118118
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Un arbre n’est jamais NULL !Un arbre n’est jamais NULL !
• C’est juste le programmeur qui l’est ! ! !C’est juste le programmeur qui l’est ! ! !
• La raison profonde est le fait que l’opération de base est :La raison profonde est le fait que l’opération de base est :– la construction d’arbre,la construction d’arbre,– qui n’est pas associativequi n’est pas associative– et la question de l’élément neutre ne se pose même pas !et la question de l’élément neutre ne se pose même pas !
![Page 119: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/119.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 119119
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Un arbre n’est jamais NULL !Un arbre n’est jamais NULL !
• C’est juste le programmeur qui l’est ! ! !C’est juste le programmeur qui l’est ! ! !
• La raison profonde est le fait que l’opération de base est :La raison profonde est le fait que l’opération de base est :– la construction d’arbre,la construction d’arbre,– qui n’est pas associativequi n’est pas associative– et la question de l’élément neutre ne se pose même pas !et la question de l’élément neutre ne se pose même pas !
Arbre ( A , Arbre ( B , C ) ) Arbre ( A , Arbre ( B , C ) ) == Arbre ( Arbre ( A , B ) , C )Arbre ( Arbre ( A , B ) , C )//
AA
BB CC
CC
AA BB
![Page 120: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/120.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 120120
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Un arbre n’est jamais NULL !Un arbre n’est jamais NULL !
• C’est juste le programmeur qui l’est ! ! !C’est juste le programmeur qui l’est ! ! !
• La raison profonde est le fait que l’opération de base est :La raison profonde est le fait que l’opération de base est :– la construction d’arbre,la construction d’arbre,– qui n’est pas associativequi n’est pas associative– et la question de l’élément neutre ne se pose même pas !et la question de l’élément neutre ne se pose même pas !
• Nous avons les fonctions suivantes :Nous avons les fonctions suivantes :
– cree_feuillecree_feuille– cree_noeudcree_noeud– est_feuilleest_feuille– fils_gauchefils_gauche– fils_droitfils_droit
![Page 121: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/121.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 121121
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Un arbre n’est jamais NULL !Un arbre n’est jamais NULL !
• C’est juste le programmeur qui l’est ! ! !C’est juste le programmeur qui l’est ! ! !
• La raison profonde est le fait que l’opération de base est :La raison profonde est le fait que l’opération de base est :– la construction d’arbre,la construction d’arbre,– qui n’est pas associativequi n’est pas associative– et la question de l’élément neutre ne se pose même pas !et la question de l’élément neutre ne se pose même pas !
• Nous avons les fonctions suivantes :Nous avons les fonctions suivantes :
– cree_feuillecree_feuille– cree_noeudcree_noeud– est_feuilleest_feuille– fils_gauchefils_gauche– fils_droitfils_droit
![Page 122: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/122.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 122122
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Je peux éventuellement écrire ceci :Je peux éventuellement écrire ceci :
typedef struct moi_memetypedef struct moi_meme
{ struct moi_meme fg , fd ; } . . .{ struct moi_meme fg , fd ; } . . .
ptr_arbre cree_feuille (int valeur)ptr_arbre cree_feuille (int valeur)
{{ptr_arbre arbre;ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->fg = NULL ;arbre->fg = NULL ;
arbre->fd = (int *) valeur ;arbre->fd = (int *) valeur ;
return ( arbre ) ;return ( arbre ) ;
}}
![Page 123: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/123.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 123123
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Je peux éventuellement écrire ceci :Je peux éventuellement écrire ceci :
typedef struct moi_memetypedef struct moi_meme
{ struct moi_meme fg , fd ; } . . .{ struct moi_meme fg , fd ; } . . .
ptr_arbre cree_feuille (int valeur)ptr_arbre cree_feuille (int valeur)
{{ptr_arbre arbre;ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->fg = NULL ;arbre->fg = NULL ;
arbre->fd = (int *) valeur ;arbre->fd = (int *) valeur ;
return ( arbre ) ;return ( arbre ) ;
}}
Nous utilisons le champ fgNous utilisons le champ fgpour indiquer que l’arbrepour indiquer que l’arbre
est une feuille,est une feuille,. . . et le fils droit pour. . . et le fils droit pourmémoriser sa valeur !mémoriser sa valeur !
![Page 124: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/124.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 124124
Listes, arbres et le pointeur NULLListes, arbres et le pointeur NULL----------------------------------------------------------------------------------------------------------------------------------
• Je peux éventuellement écrire ceci :Je peux éventuellement écrire ceci :
typedef struct moi_memetypedef struct moi_meme
{ struct moi_meme fg , fd ; } . . .{ struct moi_meme fg , fd ; } . . .
ptr_arbre cree_feuille (int valeur)ptr_arbre cree_feuille (int valeur)
{{ptr_arbre arbre;ptr_arbre arbre;
arbre = (ptr_arbre)malloc(sizeof(t_arbre));arbre = (ptr_arbre)malloc(sizeof(t_arbre));
arbre->fg = NULL ;arbre->fg = NULL ;
arbre->fd = (int *) valeur ;arbre->fd = (int *) valeur ;
return ( arbre ) ;return ( arbre ) ;
}}
Nous utilisons le champ fgNous utilisons le champ fgpour indiquer que l’arbrepour indiquer que l’arbre
est une feuille,est une feuille,. . . et le fils droit pour. . . et le fils droit pourmémoriser sa valeur !mémoriser sa valeur !
![Page 125: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/125.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 125125
SynthèseSynthèse----------------------------------------------------------------------------------------------------------------------------------
• Listes.Listes.
• Piles.Piles.
• Files.Files.
• Arbres.Arbres.
• Types de données abstraits.Types de données abstraits.
![Page 126: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations](https://reader036.vdocuments.pub/reader036/viewer/2022081512/551d9d84497959293b8bfa79/html5/thumbnails/126.jpg)
8 novembre 20068 novembre 2006 Cours d'algorithmique 2 - IntranetCours d'algorithmique 2 - Intranet 126126
m E r C i e Tm E r C i e Tb O n N e J o U r N é b O n N e J o U r N é
E ! ! !E ! ! !
n ‘ O u B l I e Z p A s D en ‘ O u B l I e Z p A s D ep R é P a R e R v O sp R é P a R e R v O s
T D ! ! !T D ! ! !