126
Cours d'algorithmique 2 - Cours d'algorithmique 2 - Intranet Intranet 1 8 novembre 2006 8 novembre 2006 Cours d’Algorithmique Cours d’Algorithmique Listes, piles et files. Listes, piles et files. Arbres. Arbres. Types de données Types de données abstraits. abstraits. Implantations. Implantations.

Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations

Embed Size (px)

Citation preview

Page 1: Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ! ! !