4
TABLE DES MATIÈRES
4 Les listes 45
4.1 Motivation : critique des tableaux . . . . . . . . . . . . . . . . . . . . 45
4.2 Les listes simplement liées . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.1 Comparaison aux tableaux . . . . . . . . . . . . . . . . . . . 47
4.2.2 Algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2.3 Listes triées . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3 Les listes circulaires avec élément pré-tête . . . . . . . . . . . . . . . 55
4.3.1 Différences par rapport aux listes « simples » . . . . . . . . . 56
4.3.2 Algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.4 Les listes doublement liées . . . . . . . . . . . . . . . . . . . . . . . 63
4.5 Implémentation des listes dans les vecteurs . . . . . . . . . . . . . . 65
4.5.1 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.6 Vue récursive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.6.1 Algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5 Les piles et les files 73
5.1 Les piles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.1.1 Implémentation dans une liste . . . . . . . . . . . . . . . . . 74
5.1.2 Implémentation dans un vecteur . . . . . . . . . . . . . . . . 75
5.2 Les files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2.1 Implémentation dans une liste . . . . . . . . . . . . . . . . . 79
5.2.2 Implémentation dans un vecteur . . . . . . . . . . . . . . . . 80
5.3 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.3.1 Vérification des parenthèses . . . . . . . . . . . . . . . . . . 86
5.3.2 Évaluation d’une expression en notation postfixée . . . . . . . 87
6 Les arbres 91
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.1.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.1.2 Vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.1.3 Cas particuliers . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.1.4 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.1.5 Application : les arbres d’expressions . . . . . . . . . . . . . 101
6.2 Parcours des arbres binaires . . . . . . . . . . . . . . . . . . . . . . . 104
6.2.1 Parcours préfixé ou parcours en profondeur . . . . . . . . . . 105
6.2.2 Parcours infixe . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.2.3 Parcours postfixé . . . . . . . . . . . . . . . . . . . . . . . . 110
6.2.4 Le parcours par niveaux ou parcours en largeur . . . . . . . . 111
6.2.5 Applications des parcours . . . . . . . . . . . . . . . . . . . 111
7 Algorithmes de recherche 115
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.2 Données stockées dans des vecteurs . . . . . . . . . . . . . . . . . . 116
7.2.1 Recherche linéaire simple . . . . . . . . . . . . . . . . . . . 116
7.2.2 Recherche linéaire dans un vecteur trié . . . . . . . . . . . . 117
7.2.3 Recherche dichotomique dans un vecteur trié . . . . . . . . . 118
7.2.4 Tables de hachage . . . . . . . . . . . . . . . . . . . . . . . 122
7.3 Données stockées dans des listes . . . . . . . . . . . . . . . . . . . . 127
7.4 Données stockées dans des arbres . . . . . . . . . . . . . . . . . . . 127
7.4.1 Parcours simple . . . . . . . . . . . . . . . . . . . . . . . . . 127