Algorithmique, Structures des Données et Programmation Pascal et C++
Tome 2
Pointeurs, Listes Chaînées, Arbres, Tris et Programmation Orientée Objet
Serigne Bira Gueye
L'Harmattan Sénégal
Avant-propos
vii
Table des Matières
xi
Table des Figures
xvii
Liste des Tableaux
xxi
I Pointeurs et Listes Chaînées23
1 Pointeurs et Listes Chaînées
25
1.1 Donnée Statique, Donnée Dynamique25
1.2 Variable, Adresse, Contenu et Type25
1.3 Pointeur26
1.3.1 Déclaration, Affectation et Pointeur NIL26
1.4 Définition d'un Type Pointeur28
1.5 Allocation Dynamique de Mémoire28
1.5.1 Allocation Dynamique de Mémoire (new())28
1.5.2 Désallocation Dynamique de Mémoire30
1.6 Pointeur sur une Structure30
1.7 Liste Linéaire Chaînée31
1.7.1 Liste Chaînée31
1.7.2 Exemple et Autres Représentations35
1.8 Exercice d'Application36
1.9 Pointeurs en C++38
1.9.1 Déclaration et Affectation d'un Pointeur en C++38
1.9.2 Définition d'un Type Pointeur en C++39
1.9.3 Liste Chaînée en C++40
1.10 Allocation Dynamique de Tableaux en C++41
1.10.1 Tableau Dynamique à une Dimension ou Vecteur41
1.10.2 Tableau Dynamique à Deux Dimensions42
1.10.3 Applications pour Tableaux Dynamiques43
1.11 Conclusion44
1.12 Exercices44
2 Listes Chaînées : Parcours, Insertion et Suppression
47
2.1 Parcours d'une Liste Chaînée47
2.1.1 Principe47
2.1.2 Implémentation en Pascal48
2.1.3 Sous-Programme de Parcours et Généralisation49
2.2 Insertion dans une Liste Chaînée51
2.2.1 Insertion au Milieu d'une Liste Chaînée51
2.2.2 Insertion à 1a. Fin d'une Liste Chaînée53
2.2.3 Insertion en Début de Liste ou dans une Liste Vide54
2.2.4 Implémentation en Pascal et Pseudo-code55
2.3 Suppression d'un Elément d'une Liste Chaînée57
2.3.1 Suppression en Début de Liste Chaînée57
2.3.2 Suppression au Milieu ou en Fin de Liste Chaînée57
2.3.3 Implémentation en Pascal et Pseudo-code59
2.4 Listes Chaînées Bidirectionnelles61
2.5 Conclusion61
2.6 Exercices62
3 Files (Queue) et Piles (Stack)
65
3.1 Les Files (Queue)65
3.1.1 Enfiler (Enqueue)66
3.1.2 Défilage (Dequeuing)67
3.1.3 Autres Opérations : InitFile, FileVide68
3.1.4 Axiomes pour la File68
3.1.5 Implémentation de Sous-Programmes68
3.1.6 File et Tableau (Queue, Array)70
3.2 Les Piles (Stack)72
3.2.1 Empilage, Empiler (Push)73
3.2.2 Dépilage, Dépiler (Pop)74
3.2.3 Autres Opérations : InitPile, PileVide75
3.2.4 Axiomes pour la Pile75
3.2.5 Implémentation de Sous-Programmes76
3.2.6 Pile et Tableau (Stack, Array)78
3.3 Conclusion79
3.4 Exercices79
II Arbres83
4 Arbres de Données, Arbres Binaires
85
4.1 Arbre (Tree), Définitions85
4.1.1 Noeud, Arête86
4.1.2 Racine86
4.1.3 Chemin86
4.1.4 Niveau, Profondeur86
4.1.5 Parent, Fils, Frères et Soeurs86
4.1.6 Degré87
4.1.7 Feuille, Noeud Interne87
4.1.8 Hauteur87
4.1.9 Ancêtre, Descendant87
4.1.10 Sous-Arbre88
4.2 Arbres Binaires88
4.2.1 Définition88
4.2.2 Arbre Binaire et Pointeurs89
4.3 Ordre des Noeuds d'un Arbre Binaire90
4.4 Parcours d'un Arbre Binaire91
4.4.1 Parcours en Profondeur91
4.4.2 Parcours en Largeur93
4.5 Arbres Binaires Plein, Complet, Relation Arbre-Tableau95
4.5.1 Arbre Binaire Plein95
4.5.2 Arbre Binaire Complet96
4.5.3 Arbre Binaire Complet et Tableau97
4.6 Autres Représentations d'un Arbre97
4.7 Conclusion98
4.8 Exercices98
5 Arbre Binaire de Recherche
101
5.1 Minimum, Maximum d'un ABR102
5.2 Recherche et Chemin d'un Noeud dans un ABR103
5.3 Insertion dans un Arbre Binaire de Recherche104
5.4 Suppression du Minimum d'un ABR105
5.5 Suppression d'un Noeud Quelconque d'un ABR107
5.5.1 Suppression d'une Feuille107
5.5.2 Suppression d'un Noeud à un Fils108
5.5.3 Suppression d'un Noeud à Deux Fils109
5.5.4 Sous-Programme de Suppression d'un Noeud111
5.6 Conclusion112
5.7 Exercices112
III Tris (Sorting) et Recherche (Search)115
6 Tris (Sorting) et Recherche (Search)
117
6.1 Recherche (Search)117
6.1.1 Recherche du Minimum ou du Maximum d'un Tableau117
6.1.2 Recherche d'une Valeur Quelconque118
6.1.3 Recherche Dichotomique dans un Tableau Trié119
6.2 Tri (Sorting)120
6.2.1 Tri par Sélection (Selection Sort)120
6.2.2 Tri par Insertion (Insertion Sort)122
6.2.3 Tri à Bulles (Bubble Sort)124
6.2.4 QuickSort (Tri Rapide)125
6.3 Conclusion129
6.4 Exercices129
7 Heap Sort (Tri par Tas)
133
7.1 Correspondance Tableau et Arbre Binaire Complet133
7.2 Rendre Heap (Heapify MaxHeap)134
7.3 Tri par Tas : Heap Sort135
7.4 Conclusion138
7.5 Exercices138
IV Programmation Orientée Objet (POO)141
8 Classes et Objets
143
8.1 Introduction143
8.2 Définition d'une Classe143
8.3 Classe et Prototype de Méthode146
8.4 Interfaces : Sélecteur et Modificateur149
8.5 Le Pointeur this150
8.6 Classe et Projet151
8.7 Surcharge de Fonction et de Méthode153
8.8 Conclusion154
8.9 Exercices154
9 Constructeurs, Amitié et Surcharge d'Opérateurs
157
9.1 Constructeurs157
9.1.1 Constructeur157
9.1.2 Surcharge de constructeurs160
9.1.3 Initialisation d'un Objet162
9.2 Destructeurs163
9.3 Amitié (friend, friendship)164
9.3.1 Fonction Amie164
9.3.2 Classe Amie166
9.4 Surcharge d'Opérateurs167
9.5 Conclusion170
9.6 Exercices170
10 Héritage, Polymorphisme et Templates
173
10.1 Héritage173
10.1.1 Relations entre Classes : Dérivation et Composition173
10.1.2 Héritage en C++175
10.1.3 Héritage Multiple178
10.2 Polymorphisme179
10.2.1 Reliure Statique (Static Binding)179
10.2.2 Fonction Virtuelle, Reliure Dynamique181
10.2.3 Fonction Virtuelle Pure, Méthode et Classe Abstraites182
10.2.4 Classe de Base Virtuelle183
10.3 Templates185
10.3.1 Template de Fonction185
10.3.2 Template de Classe187
10.4 Conclusion188
10.5 Exercices188
Annexes190
A Mots Réservés et Opérateurs en C++
191
A.1 C++ Keywords191
A.2 Opérateurs en C++192