Sunteți pe pagina 1din 48

Algorithmiques et

Structures de donnes 01
Cours + TDs + TPs
Version 1.0.0

Mr. Ismail HADJADJ


Octobre 2013

Algorithmique et Structures de Donnes


Remarque :

Ismail Hadjadj

Ce document n'est pas rvis, vous pouvez trouver des erreurs d'orthographes, de saisies et autres.

Table des matires

1 Gnralits
1.1
1.2
1.3
1.4
1.5
1.6

1.7
1.8

Introduction . . . . . . . . . . .
Algorithme(Dnition) . . . . .
Structure d'un algorithme : . .
Sous-Programmes . . . . . . . .
1.4.1 Passage de paramtre . .
L'indcidabilit de terminaison .
Conception d'un algorithme . .
1.6.1 Analyse descendent . . .
1.6.2 Analyse ascendante . . .
1.6.3 mlange des deux . . . .
Conclusion . . . . . . . . . . . .
Exercices . . . . . . . . . . . . .

2 Complexit d'Algorithmes
2.1
2.2

2.3
2.4
2.5
2.6
2.7
2.8

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

Introduction . . . . . . . . . . . . . . . .
Qualit d'un algorithme . . . . . . . . .
2.2.1 Qualit d'criture . . . . . . . .
2.2.2 Terminaison . . . . . . . . . . . .
2.2.3 Validit . . . . . . . . . . . . . .
2.2.4 Performance . . . . . . . . . . . .
Complexit d'un algorithme . . . . . . .
Msure de complexit . . . . . . . . . . .
Complexit moyenne et en pire des cas .
2.5.1 Temps le plus mouvais(en pire des
2.5.2 Temps moyenne . . . . . . . . . .
Notation utilises . . . . . . . . . . . . .
2.6.1 Notation "o" . . . . . . . . . . .
2.6.2 Notation "O" . . . . . . . . . . .
Un classement des fonctions . . . . . . .
Exercices . . . . . . . . . . . . . . . . . .
2.8.1 Exercice 01 . . . . . . . . . . . .
2.8.2 Exercice 02 . . . . . . . . . . . .
2.8.3 Exercice 03 . . . . . . . . . . . .
2.8.4 Exercice 04 . . . . . . . . . . . .
2.8.5 Exercice 05 . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
cas)
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

5
5
6
6
6
7
8
8
8
8
8
9

10

10
10
10
10
10
10
10
11
11
11
11
13
13
13
13
14
14
14
15
16
16

Algorithmique et Structures de Donnes

Ismail Hadjadj

3 La rcursivit
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8

3.9

Introduction . . . . . . . . . . . . . .
Dnition . . . . . . . . . . . . . . .
Exemples . . . . . . . . . . . . . . .
3.3.1 Exemple1 . . . . . . . . . . .
3.3.2 Exemple2 : . . . . . . . . . .
Rgles . . . . . . . . . . . . . . . . .
Rcursivit croise . . . . . . . . . .
3.5.1 Exemple : Paire ou impaire .
Problme(les tours d'Hano) . . . . .
Conclusion . . . . . . . . . . . . . . .
Exercices . . . . . . . . . . . . . . . .
3.8.1 Exercice 01 . . . . . . . . . .
3.8.2 Exercice 02 . . . . . . . . . .
3.8.3 Exercice 03 . . . . . . . . . .
3.8.4 Exercice 04 . . . . . . . . . .
3.8.5 Exercice 05 . . . . . . . . . .
TP . . . . . . . . . . . . . . . . . . .
3.9.1 Recherche un lment dans un
3.9.2 Recherche Squentielle . . . .
3.9.3 Recherche dichotomique . . .
3.9.4 Complexit . . . . . . . . . .

4 Structure de donnes
4.1
4.2
4.3
4.4

Types de donnes abstraits (TDA)


Dnition d'un type abstrait . . . .
4.2.1 Exemple . . . . . . . . . . .
L'implantation D'un Type Abstrait
Utilisation de type abstrait . . . . .

5 Structures linaires-Les Listes


5.1
5.2
5.3

5.4
5.5

.
.
.
.
.

. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
tableau
. . . . .
. . . . .
. . . . .
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dnition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dnition abstraite . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.2 Dnition abstraite . . . . . . . . . . . . . . . . . . . . . . .
5.3.3 Dnition axiomatique . . . . . . . . . . . . . . . . . . . . .
Implimentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Implmentation contigu(Utilisation d'un tableau) . . . . . .
5.4.2 Implmentation chanes(Utilisation d'une structure chane)
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5.1 Exercice 01 : Pointeurs . . . . . . . . . . . . . . . . . . . . .
5.5.2 Exercice 02 : Pointeurs . . . . . . . . . . . . . . . . . . . . .
5.5.3 Exercice 03 : les listes . . . . . . . . . . . . . . . . . . . . .
5.5.4 Exercice 04 :les listes . . . . . . . . . . . . . . . . . . . . . .
5.5.5 Exercice 05 :les listes . . . . . . . . . . . . . . . . . . . . . .
5.5.6 Exercice 06 :Algorithmes de base . . . . . . . . . . . . . . .
5.5.7 Exercice 07 :Un peu avancs . . . . . . . . . . . . . . . . . .
5.5.8 Exercice 08 : Dirence de deux listes linaires chanes . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

17

17
17
18
18
18
19
19
19
20
21
22
22
22
22
22
22
24
24
24
24
25

26

26
26
26
27
27

28

28
28
28
28
29
29
29
29
33
37
37
37
38
38
38
38
38
39

Algorithmique et Structures de Donnes


5.6

Ismail Hadjadj

5.5.9 Exercice 09 : Raliser le chanage arrire d'une liste doublement chane . .


TP : Dictionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.1 Problme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.2 Implmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 Les Piles
6.1
6.2

6.3
6.4

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . .
Dnition abstraite . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Ensembles . . . . . . . . . . . . . . . . . . . . . . .
6.2.2 Description fonctionnelle . . . . . . . . . . . . . . .
6.2.3 Description axiomatique . . . . . . . . . . . . . . .
implmentation . . . . . . . . . . . . . . . . . . . . . . . .
6.3.1 Utilisation des tableaux (Implmentation Contigu)
6.3.2 Utilisation des pointeurs (Implmentation chane)
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.1 Exercice 02 :Algo. de base sur les Piles . . . . . . .
6.4.2 Exercice 03 :Un peu avancs . . . . . . . . . . . . .
6.4.3 Exercice 03 : Inverser pile et le . . . . . . . . . . .

7 Les Files
7.1
7.2

7.3
7.4

Introduction . . . . . . . . . . . . . . . . . . . .
Dnition abstraite . . . . . . . . . . . . . . . .
7.2.1 Ensembles . . . . . . . . . . . . . . . . .
7.2.2 Description fonctionnelle . . . . . . . . .
7.2.3 Description axiomatique . . . . . . . . .
implantation . . . . . . . . . . . . . . . . . . . .
7.3.1 Utilisation des tableaux (Implmentation
Exercices . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Exercice 01 : . . . . . . . . . . . . . . . .
7.4.2 Exercice 02 :Algo. de base sur les Files .
7.4.3 Exercice 03 :Un peu avancs . . . . . . .
7.4.4 Exercice 03 : Inverser une le . . . . . .

. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Contigu)
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

39
40
40
40

41

41
41
41
41
41
42
42
43
44
44
44
44

45

45
45
45
45
45
46
46
47
47
47
47
47

Chapitre 1
Gnralits

1.1 Introduction
pour rsoudre un problme donne par l'informatique l'utilisateur de l'ordinateur doit mettre au
point un programme et l'excution par la machine
Un programme est une succession logique et ordonne d'instructions
Pour crire un programme il faut :
 Bien connatre le problme ;
 S'avoir le dcouper logiquement en un ensemble d'oprations lmentaires(actions) ;
 Connatre un langue de programmation.
problme Algorithme programme

1.2 Algorithme(Dnition)
Un algorithme est une "Spcication d'un schma de calcule sous forme d'une suite nie d'opration
lmentaire un enchanement dtermin".
Ou encore :
La description des tapes suivre pour raliser un travail.

programme est (donc) la description d'un algorithme dans un langage de programmation.


Remarque :
Un

Un algorithme est indpendant du langage de programmation(Donc la machine).

Algorithmique et Structures de Donnes

Ismail Hadjadj

1.3 Structure d'un algorithme :


La structure d'un algorithme est donc :
Algorithme 1: NomDeLAlgorithme
Const : const1,cont2,....=
Var : var1,var2... :type

Procdure P1(....)
dbut

n

...
...
...

Fonction f1(....) :type


dbut

n
dbut

n

...
...
...

...
P 1(...)
var1 f 1(...)
...

1.4 Sous-Programmes
Une fonction est un algorithme indpendant, l'appel de la fonction dclenche l'excution de son
bloc d'instructions. Une fonction se termine entourant ou non une valeur.
Un procdure est une fonction qui retourne vide.

1.4.1 Passage de paramtre


Par valeur
On dit qu'un procdure fait un passage par valeur, s'il ne change pas la valeur de variable pass.

Par rfrence
Il s'agit de modication du valeur du variable pass.

Algorithmique et Structures de Donnes


Exemples
Procdure P1(x :entier)
Var : i :entier
dbut
pour i=1 10 faire
xxx

n

npour

Procdure P1(var x :entier)


Var : i :entier
dbut
pour i=1 10 faire
xxx

n

npour

1.5 L'indcidabilit de terminaison


Supposons que le problme de l'arrt soit dcidable
une fonction B qui dcide si un programme s'arrte
B(X : programme) = true
B(X2 : programme) = f alse

Algorithme 2: X
Var : y :entier
dbut
n

y1
Ecrire(y)

Algorithme 3: X2
Var : y :entier
dbut
y1

tant que y>0 faire


y y+1

ntq
n

Ecrire(y)

Proposons l'algorithme :

Ismail Hadjadj

Algorithmique et Structures de Donnes

Ismail Hadjadj

Algorithme 4: C
dbut
tant que B(C) faire
ntq
n

Ecrire(y)

Si C boucle indiniment, alors B(C) = f alse C termine


Sinon B(C) = true C boucle inniment
Alors Contradiction

Notez bien :

Dans ce cours , On tudiera seulement des problmes pour lesquels il existe des algorithmes dcidables.

1.6 Conception d'un algorithme


1.6.1 Analyse descendent
Dcomposer le problme en sous problmes.

1.6.2 Analyse ascendante


Utiliser les fonctions, primitives, outils,.. dont on dispose, les assembler pour en faire un truc qui
rsoudre notre problme.

1.6.3 mlange des deux


On fait une analyse descendante tout en ayant l'esprit les module bien conus qui existent dj.

1.7 Conclusion
dans ce cours on a introduire des notions de base lies l'algorithmique.

Algorithmique et Structures de Donnes

1.8 Exercices

Ismail Hadjadj

Chapitre 2
Complexit d'Algorithmes

2.1 Introduction
Il existe souvent plusieurs algorithmes permettant de rsoudre un mme problme. Exemple : les
algorithmes de tri. Le choix du meilleur algorithme implique une analyse de ses performances. En
gnral, le critre le plus important est celui du temps ncessaire son excution. Celui ci dpend le
plus souvent de la quantit de donnes traiter. Par exemple, le temps ncessaire pour trier un ensemble
d'objets dpend du nombre d'objets.

2.2 Qualit d'un algorithme


2.2.1 Qualit d'criture
un algorithme doit tre structur, indent, modulaire, avec des commentaires pertinents, etc. Il faut
pouvoir comprendre la structure d'un coup d'oeil rapide, et pouvoir aussi revenir dessus 6 mois plus
tard et le comprendre encore.

2.2.2 Terminaison
le rsultat doit tre atteint en un nombre ni d'tapes. Il ne faut donc pas de boucles innies, il faut
tudier tous les cas possibles de donnes.

2.2.3 Validit
le rsultat doit rpondre au problme demande. Attention, un jeu d'essais ne prouve
programme est correct. Il peut seulement prouver qu'il est faux.

jamais qu'un

2.2.4 Performance
Etude du cot (complexit) en temps et en mmoire. On s'intresse dans ce cours qu'au complexit
temporelle.

2.3 Complexit d'un algorithme


La complexit d'un algorithme est une estimation du nombre d'oprations de base eectues par
l'algorithme en fonction de la taille des donnes en entres de l'algorithme.
10

Algorithmique et Structures de Donnes

Ismail Hadjadj

11

La Complexitd'un algorithme c'est pour :


1. Evaluer les ressources(mmoire CPU)utiles,
2. Comparer deux algorithmes pour le mme problme,
3. donner un borne sur ce qui est eectivement possible de rsoudre. On considre aujourd'hui qu'on
peut raliser en temps raisonnable de 260 oprations, quand la mmoire est de l'ordre de 1010
octets.

2.4 Msure de complexit


Pour mesurer la complexit temporelle d'un algorithme, on s'intresse plutt aux oprations le plus
coteuses pour le problme de calcul particulier ;
 Racine carre, Log, Exp, Addition relle ;
 Comparaisons dans le cas des tris ...
et on calcule le nombre d'oprations fondamentales excutes par l'algorithme.
Le temps de l'excution dpend de la taille de l'entre. On veut considre seulement la taille essentielle
de l'entre. Cela peut tre par exemple :
 le nombre d'lments combinatoires dans l'entre,
 le nombre de bits pour reprsenter l'entre,
 ... etc ...

2.5 Complexit moyenne et en pire des cas


Soi n la taille des donnes du problme et T (n) le temps d'excution de l'algorithme. On distingue :

2.5.1 Temps le plus mouvais(en pire des cas)


Tmax (n) qui correspond au temps maximum pris par l'algorithme pour un problme de taille n ;

2.5.2 Temps moyenne


Tmoy (n) temps moyen d'excution sur de donnes de taille n (Supposition sur la distribution de donnes).

Soit A un Algorithme
Dn l'ensemble des entres de taille n
I Dn une entre
1. CoutA (i) = nombre d'opration fondamentales excutes par A sur I .
2. La complexit de A en pire des cas :

Tmax (n) = M ax(CoutA (i)); I Dn


3. la complexit de A en moyenne :

Tmoy (n) =

X
iD

P r[i] CoutA [i]

Algorithmique et Structures de Donnes

Ismail Hadjadj

Exemple
Recherche squentielle :

Fonction RechercheS(tab :Tableau de n lments ;x :lment) :entier


Var : j :entier
dbut
j1

tant que (j n)et(tab[j] <> x) faire


j j+1

ntq
si j>n alors

RechercheS 1

sinon

RechercheS j

nsi

n
Comlexit en pire des cas :
Tmax (RS) = n

Complexit moyenne :

-P r[x tab] = q
- Si x tab alors tous les places son quiprobables pour 1 i n soit :

Ii = x tab
et

In+10 = x
/ tab
On a :
P r[Ii ] = q/n pour 1 i n et CoutR S(Ii ) = i
et
P r[In+1 ] = 1 q et CoutR S(In+1 ) = n

Tmoy (RS) =
=

n+1
X
j=1
n
X

P r[Ij ] CoutR S(Ij )


q/n(i) + (1 q)n

i=1

= q/n

n
X

i + (1 q)n

i=1

= q/n n(n + 1)/2 + (1 q)n


= (1 q/2)n + q/2

-Si q = 1 alors Tmoy (RS) = (n + 1)/2


-Si q = 1/2 alors Tmoy (RS) = (3n + 1)/4

12

Algorithmique et Structures de Donnes

Ismail Hadjadj

13

2.6 Notation utilises


Il faut comparer les taux d'accroissement de direntes fonctions qui mesurent les performances d'un
programme.

2.6.1 Notation "o"


On dit que f (x) = o(g(x)) pour x si

f (x)
=0
lim
g(x)
limx Ce que veut dire que f crot plus lentement que g quand x est trs grand. Par exemple :
x2 = o(x5 )
sin(x)
= o(x)
14.709 x = o(x/2 + 7 cos(x))
23 log(x) = x0.002

2.6.2 Notation "O"


On dit quef (x) = O(g(x)) s'il existe k et x0 tels que :

x > x0 f (x) < kg(x)


La notation o est plus prcise que O, mais O est plus facile calculer et susant. Par exemple :
sin(x) = O(x)
sin(x) = O(1)

2.7 Un classement des fonctions


Problmes rationnellement facile :
Groupe01 : log(log(x)), log(x), log2 (x)
Groupe02 : x0.2 , x, x2 , x15 log(x)
Problmes diciles :

Groupe 03 :e x , 1.032x , 2x
Groupe 04 :x!, xx , xx

Algorithmique et Structures de Donnes

Ismail Hadjadj

14

2.8 Exercices
Rappele :Notation "O"

On dit quef (x) = O(g(x)) s'il existe k et x0 tels que :

x > x0 f (x) < kg(x)

2.8.1 Exercice 01
1. Parmi les fonctions suivantes, quelles sont celles qui ont le mme ordre de grandeur ?
 f 1(n) = 4n3 + n
 f 2(n) = n2 + log2 (n)
 f 3(n) = n2 log3 (n) + 6n3
n(n2 + 1)
 f 4(n) =
2
2. En utilisant la dnition de O montrer que f (n) + g(n) = O(max(f (n); g(n)))
3. En utilisant la dnition de O montrer que 3n2 + 4n + 6 = O(n2 )

2.8.2 Exercice 02
Considrer les algorithmes suivantes avec un temps d'excution T (n) pour une longueur de donnes
n. Dterminer leur complexits asymptotiques respectives, et les classez par ordre de grandeur croissant.
Algorithme A1 T (n) = 3n + 2
Algorithme A2 T (n) = 6
Algorithme A3 T (n) = 4n2 + n + 2

Algorithme A4

Excuter A1 ;
Excuter A2 ;
Excuter A3 ;

Algorithme A5
Algorithme 5: A5
dbut
pour i 1 n faire
Excuter A3

npour

Excuter A1

n
Algorithme A6

Algorithmique et Structures de Donnes

Ismail Hadjadj

15

Algorithme 6: A6
dbut
pour i 1 5 faire
Excuter A1

n

npour

2.8.3 Exercice 03
Evaluer les complexits des fonctions et des programmes suivants en donnant le nombre d'instructions
ralises.
Algorithme 7: A1
Var : a,b :entier

dbut

n

a0
b0
Af f icher(a)
Af f icher(b)

Fonction somme(n :entier) :entier


Var : i,res :entier
dbut
res 0
pour i 1 n faire
res res + i

npour

n

somme res

Fonction f1(n :entier) :entier


Var : i :entier
dbut
pour i 1 n faire
somme(n)

n

npour

Fonction f2(n :entier) :entier


Var : i :entier
dbut
pour i 1 n faire
somme(i)

n

npour

Algorithmique et Structures de Donnes

Ismail Hadjadj

16

Fonction f3(n :entier) :entier


Var : i,j,k :entier
dbut
pour i 1 n faire
pour j i n faire
pour i 1 j faire
inst()

n

npour
npour
npour

2.8.4 Exercice 04
Calculer la complexit de la fonction rcursive :

Fonction Fib(n :entier) :entier


vue en cours.

2.8.5 Exercice 05
tudiez le nombre d'additions ralises par les fonctions suivantes dans le meilleur cas, le pire cas,

Fonction f1(t :tab de n en


Var : s :entier
dbut
s0

pour i 1 n faire
si t[i] > a alors

puis dans le cas moyen en supposant que les tests ont une probabilit de d'tre vrai.

s s + t[i]

nsi
npour
n
Fonction f1(a,b :entier) :entier
Var : s :entier
dbut
s0
si a > b

alors
pour i 1 n faire
ss+a

npour
sinon

ss+b

nsi
n

f1 s

f1 s

Chapitre 3
La rcursivit

3.1 Introduction
la rcurrence ("induction") est un outil mathmatique essentiel. Tout informaticien se doit de la
matriser. Heureusement, la rcurrence est une technique simple, en dpit de sa puissance.
La rcursivit est une notion trs utilise en programmation, et qui permet l'expression d'algorithmes
concis, faciles crire et comprendre. La rcursivit peut toujours tre remplace par son quivalent
sous forme d'itrations, mais au dtriment d'algorithmes plus complexes surtout lorsque les structures
de donnes traiter sont elles-mmes de nature rcursive.

3.2 Dnition
 Un algorithme (fonction, procdure) est dite rcursif lorsqu'il s'appelle lui-mme, c--d., dnition
(son code) contient un appel lui-mme.
 Un algorithme qui n'est pas rcursif est dit itratif.

Notez Bien

 On peut toujours transformer un algorithme rcursif en algorithme itratif.

la forme gnrale d'un algorithme rcursive :


Algorithme 8: P(...)
dbut
si n() alors
....
//pas d'appel rcursif

sinon

...
P (...) //l'algorithme P appelle lui-mme une
... //ou plusieurs fois

n

nsi

17

Algorithmique et Structures de Donnes

3.3 Exemples
3.3.1 Exemple1
Calcul de la factorielle d'un nombre.

Dnition itrative :

n! = F (n) = n (n 1) (n 2) ... 2 1
Soit en algorithmique :

Algorithme 9: factorielle(n :entier) :entier


Var : i,f :entier
dbut
f 1

pour i=1 n faire


f f i

npour

f actorielle f

n
Dnition rcursive :
F (0) = 1
F (n) = n F (n 1); Soit en algorithmique :

Algorithme 10: factRecursive(n :entier) :entier


dbut
si n = 0 alors
f actorielle 1

sinon

f actorielle f actorielle(n 1) n

n

nsi

3.3.2 Exemple2 :
La suite des nombres de Fibonacci se dnit comme suit :
f0 = 0
f1 = 1
fn = fn1 + fn2 si n > 1
On peut formuler cette suite sous forme de fonction (n >= 0) :
f ibonacci(n) = n si n <= 1
f ibonacci(n) = f ibonacci(n 1) + f ibonacci(n 2) si n > 1
soit en Algorithmique :

Algorithme 11: bonacciRec(n :entier) :entier


dbut
si n <= 1 alors
f ibonacci n

sinon

f ibonacci f ibonacci(n 1) + f ibonacci(n 2)

n

nsi

Ismail Hadjadj

18

Algorithmique et Structures de Donnes

Ismail Hadjadj

19

3.4 Rgles
1. Tout algorithme rcursif doit distinguer plusieurs cas, dont l'un au moins ne doit pas comporter
d'appel rcursif.
 Les cas non rcursifs d'un algorithme rcursif sont appels cas de base.
 Les conditions que doivent satisfaire les donnes dans ces cas de base sont appeles conditions
de terminaison.
2. Tout appel rcursif doit se faire avec des donnes plus proches de donnes satisfaisant une condition
de terminaison.

3.5 Rcursivit croise


Dans la rcursivit croise, les appels rcursifs sont provoqus par l'excution d'autres procdure ou
fonction.

Procdure P1(x)
dbut

n

...
Q(f (x))
...

Procdure Q1(x)
dbut

n

...
P (g(x))
...

3.5.1 Exemple : Paire ou impaire


On peut formuler les notions rcursives suivant :
 Le 0 est paire et non impaire.
 Un nombre n est paire si n-1 est impaire.
 Un nombre n est impaire si n-1 est paire.
Soit en algorithmique :

Fonction Paire(n :entier) :entier


dbut
si n = 0 alors
P aire vrai

sinon

P aire ImP aire(n 1)

n

nsi

Algorithmique et Structures de Donnes

Ismail Hadjadj

20

Figure 3.1  Position de dpart des tours d'Hanoi


Fonction ImPaire(n :entier) :entier
dbut
si n = 0 alors
ImP aire f alse

sinon

ImP aire P aire(n 1)

n

nsi

3.6 Problme(les tours d'Hano)


Le titre du problme vient de l'histoire raconte habituellement, qui est celle de moines bouddhistes
en Asie du sud-est qui grnent le temps en transfrant des disques, tous de tailles direntes, sur un jeu
de trois piquets (voir gure 1). Dans cette gure il n'y a que cinq disques, mais la tradition veut que les
moines jouent avec 64. L'histoire est une invention du dix-neuvime sicle, Lucas la plaant Bnars
(en Inde). On ne sait pas comment elle s'est restitue Hano . . .
Le jeu consiste transfrer la pile de disques du piquet A vers le piquet B, en utilisant C comme
piquet de manoeuvre, tout en respectant les deux rgles suivantes :
 un disque ne peut pas tre pos sur plus petit que lui,
 on ne dplace qu'un disque la fois.
La solution la plus simple vient de la rponse la question suivante : "si je savais transfrer n-l disques,
saurais-je transfrer n ?". La rponse est oui, car autrement nous n'aurions pas pos la question. Ainsi,
pour transfrer n disques de A B, on commence par le transfert de n-l disques de A C, suivi du
dplacement du dernier disque (le plus gros) de A B, suivi du transfert des n-l disques de C B.
Cela donne la procdure :

Procdure hanoi(n :entier ; a,b :entier)


dbut
si n = 1 alors
deplacement(a, b)

sinon

hanoi(n 1, a, 6 a b)
deplacement(a, b)
hanoi(n 1, 6 a b, b)

n

nsi

Algorithmique et Structures de Donnes

Ismail Hadjadj

21

Dans cette procdure, nous avons suppos que les piquets sont numrots 1,2,3. Dplacer un disque
se fait par la procdure dplacement. Pour n = l le dplacement est immdiat, autrement on applique
l'algorithme dcrit ci-dessus, 6-a-b tant le numro du troisime piquet (6=1+2+3, donc en soustrayant
deux des trois possibilits de 6 on obtient la troisime).

3.7 Conclusion
Certains problmes peuvent tre rsolus plus logiquement en utilisant la rcursivit. Les programmes
sont plus compacts, plus faciles crire et comprendre. Son usage est naturel quand le problme
traiter peut se dcomposer en deux ou plus sous-problmes identiques au problme initial mais avec des
valeurs de paramtres direntes. Refuser la rcursivit dans ce dernier cas oblige l'utilisateur grer
lui-mme une pile des direntes valeurs des variables, ce que le systme fait automatiquement lors de
l'utilisation de la rcursivit.

Algorithmique et Structures de Donnes

Ismail Hadjadj

22

3.8 Exercices
3.8.1 Exercice 01
Ecrire une fonction rcursive qui calcule le carr d'un entier n2 = n n :

Fonction carr (n : Entier) : Entier

On pourra utiliser la relation suivante : (n + 1)2 = n2 + 2n + 1.

3.8.2 Exercice 02
Ecrire une fonction rcursive qui prend en argument une chane de caractres et qui renvoie un
boolen indiquant s'il s'agit d'un palindrome ou non.

3.8.3 Exercice 03
On dnit la fonction suivante :
Fonction McCarty(n : Entier) : Entier

dbut
si n > 100 alors

M cCarthy n 10

sinon

M cCarthy M cCarthy(M cCarthy(n + 11))

n

nsi

1. Quelle est la valeur de McCarthy(n) pour n > 100 ?


2. Calculer McCarthy(98), McCarthy(99) et McCarthy(100).
3. En dduire la valeur de McCarthy(n) pour n - 100. Expliquer.

3.8.4 Exercice 04
Ecrire une procdure rcursive qui reprsente le dplacement d'un cavalier sur un chiquier partir
de la position (X0 , Y0 ).

3.8.5 Exercice 05
Soit une fonction continue f dnie sur un intervalle [a; b]. On cherche trouver un zro de f , c'est-dire un rel x [a; b] tel que f (x) = 0. Si la fonction admet plusieurs zros, n'importe lequel fera
l'aaire. S'il n'y en a pas, il faudra le signaler.
Dans le cas o f (a).f (b) < 0, on est sr de la prsence d'un zro. Lorsque f (a).f (b) > 0, il faut
rechercher un sous-intervalle [; ], tel que f ().f () < 0.
L'algorithme procde par dichotomie, c'est--dire qu'il va diviser l'intervalle de recherche en deux
moitis chaque tape. Si l'un des deux nouveaux intervalles, par exemple [; ], est tel que f ().f () <
0, on sait qu'il contient un zro puisque la fonction est continue : on poursuivra alors la recherche dans
cet intervalle.
En revanche, si les deux demi intervalles sont tels que f a le mme signe aux deux extrmits, la
solution, si elle existe, sera dans l'un ou l'autre de ces deux demi intervalles. Dans ce cas, on prendra
arbitrairement l'un des deux demi intervalles pour continuer la recherche ; en cas d'chec on reprendra
le deuxime demi intervalle qui avait t provisoirement nglig.

Algorithmique et Structures de Donnes

Ismail Hadjadj

crivez de faon rcursive l'algorithme de recherche d'un zro, prs, de la fonction f .

23

Algorithmique et Structures de Donnes

Ismail Hadjadj

24

3.9 TP
L'objective de ce TP et d'exprimenter la rcursivit et la complexit des algorithme

Notez bien :
 Un rapport(3 page max) et code source doit tre remis avant le :................

3.9.1 Recherche un lment dans un tableau


La recherche compare les dirents lments d'un tableau la clef reherche.

exemple :

La valeur recherche est 7.


La case colore est l'lment en cours de traitement.

8
8
8
8

5
5
5

2
2

2
2

7
7
7

1
1
1
1

3
3
3
3

0
0
0
0

4
4
4
4

Table 3.1  recherche dans un tableau


La valeur a t trouve ; la fonction retourne la position de cette valeur, qui dans notre cas est 4.

3.9.2 Recherche Squentielle


La recherche squentielle consiste parcourir le tableau un par un jusqu' trouver le clef.
1. Ecrivez un sous-programme pascale pour rsoudre le problme de la recherche squentielle.

Fonction RechercheS(A :tableau, e :entier) : Entier

2. Donnez un exemple de programme principale qui utilisent cette fonction.


3. Si le tableau est ordonne ; modiez la fonction pour supporter ce changement.
4. Calculer le nombre de comparaison pour un recherche d'un lment la n du tableau de 64
lments. Qu'est ce que reprsente ce nombre.

3.9.3 Recherche dichotomique


Cet algorithme opre sur un ensemble ordonn et se sert de l'ordre pour diriger la recherche. Le mot
dichotomie vient du grec qui signie : couper en deux.
La recherche dichotomique dans un tableau tri repose sur le principe suivant : si la recherche
s'eectue entre les indices bi et bs on compare la valeur recherche x avec la valeur qui est gale
bi + bs
distance des bornes bi et bs , soit l'indice m =
2
 Si x est gale la valeur en m, alors la recherche s'arrte positivement, sinon
 Si x est infrieur la valeur en m alors on continue la recherche entre les indices bi et m 1 sinon
 On continue la recherche entre les indices m + 1 et bs .
1. Calculer log2 (64).
2. Ecrire une fonction RechDicho
Fonction RechDicho(A :tableau, e :entier) : Entier
qui a pour paramtre un tableau que l'on suppose tri, un entier x et qui renvoie l'indice de x si
x est dans le tableau, 1 sinon, selon le principe nonc ci-dessus.

Algorithmique et Structures de Donnes

Ismail Hadjadj

25

3. Donnez un exemple de programme principale qui utilisent cette fonction.


4. CalculerCalculer le nombre de comparaison pour un recherche d'un lment la n du tableau de
64 lments. Qu'est ce que reprsente ce nombre.

3.9.4 Complexit
1. En dduire la complexit C1 du fonction RechercheS .
2. En dduire la complexit C2 du fonction RechDicho.
C1
3. Calculer lim .
C2
4. Qu'est ce que on peut dduire.

Chapitre 4
Structure de donnes

4.1 Types de donnes abstraits (TDA)


Un TDA est un ensemble de donnes organis de sorte que les spcications des objets et des
oprations sur ces objets (interface) soient spares de la reprsentation interne des objets et de de la
mise en oeuvre des oprations. Exemple de TDA : le type entier muni des oprations + ;- ;* ;% ; = ; > ;
< ;<= ;>= ;== est un TDA.
Une mise en oeuvre d'un TDA est la structure de donnes particulire et la dnition des oprations
primitives dans un langage particulier.
Les avantages des TDA sont :
 prise en compte de types complexes.
 sparation des services et du codage. L'utilisateur d'un TDA n'a pas besoin de connatre les dtails
du codage.
 criture de programmes modulaires.

4.2 Dnition d'un type abstrait


Un type abstrait est dcrit par sa signature qui comprend :
 une dclaration des ensembles dnis et utiliss ;
 une description fonctionnelle des oprations ;
 une description axiomatique de la smantique des oprations.

4.2.1 Exemple
Dclaration :
EntierN aturel.0 EntierN aturel

Description fonctionnelle :
succ : EntierN aturel EntierN aturel
+ : EntierN aturel + EntierN aturel EntierN aturel
: EntierN aturel EntierN aturel EntierN aturel

Description axiomatique

1. x EntierN aturel; x0 ; succ(x) = x0


2. x; x0 EntierN aturel; x 6= x0 succ(x) 6= succ(x0 )
3. @x EntierN aturel; succ(x) = 0
26

Algorithmique et Structures de Donnes

Ismail Hadjadj

27

4. x EntierN aturel; x + 0 = x
5. x; y EntierN aturel; x + succ(y) = succ(x + y)
6. x EntierN aturel; x 0 = 0
7. x; y EntierN aturel; x succ(y) = x + xy

4.3 L'implantation D'un Type Abstrait


L'implantation est la faon dont le type abstrait est programm dans un langage particulier.
Pour un type abstrait donn, plusieurs implantations possibles peuvent tre dveloppes.Le choix
d'implantation du type abstrait variera selon l'utilisation qui en est faite et aura une inuence sur la
complexit des oprations.

4.4 Utilisation de type abstrait


Puisque la dnition d'un type abstrait est indpendante de toute implantation particulire, l'utilisation du type abstrait devra se faire exclusivement par l'intermdiaire des oprations qui lui sont associes
et en aucun cas en tenant compte de son implantation. D'ailleurs certains langages de programmation
peuvent vous l'imposer, mais ce n'est malheureusement pas le cas de tous les langages de programmation
et c'est alors au programmeur de faire preuve de rigueur !
Les en-ttes des fonctions et des procdures du type abstrait et les armations qui dnissent leur
rle reprsentent l'interface entre l'utilisateur et le type abstrait. Ceci permet videmment de manipuler le type abstrait sans mme que son implantation soit dnie, mais aussi de rendre son utilisation
indpendante vis--vis de tout changement d'implantation.

Chapitre 5
Structures linaires-Les Listes

5.1 Introduction
Les structures linaires sont un des modles de donnes les plus lmentaires et utiliss dans les
programmes informatiques. Elles organisent les donnes sous forme de squence non ordonne d'lments
accessibles de faon squentielle. Tout lment d'une squence, sauf le dernier, possde un successeur.
Une squence s constitue de n lments sera dnote comme suit :
s =< e1 , e2 , e3 , . . . , en >
et la squence vide :
s =<>
Les oprations d'ajout et de suppression d'lments sont les oprations de base des structures linaires. Selon la faon dont procdent ces oprations, nous distinguerons direntes sortes de structures
linaires. Les listes autorisent des ajouts et des suppressions d'lments n'importe o dans la squence,
alors que les piles et les les ne les permettent qu'aux extrmits. On considre que les piles et les les
sont des formes particulires de liste linaire. Dans ce chapitre, nous commencerons par prsenter la
forme gnrale, puis nous tudierons les trois formes particulires de liste.

5.2 Dnition
La liste dnit une forme gnrale de squence. Une liste est une squence nie d'lments reprs
selon leur rang. S'il n'y a pas de relation d'ordre sur l'ensemble des lments de la squence, il en existe
une sur le rang. Le rang du premier lment est 1, le rang du second est 2, et ainsi de suite. L'ajout et
la suppression d'un lment peut se faire n'importe quel rang valide de la liste.

5.3 Dnition abstraite


5.3.1 Ensembles
Liste est l'ensemble des listes linaires non ordonnes dont les lments appartiennent un ensemble
quelconque. L'ensemble des entiers reprsente le rang des lments. La constante listevide est la liste
vide.
Liste utilise , naturel et entier
listevide Liste

28

Algorithmique et Structures de Donnes

Ismail Hadjadj

29

5.3.2 Dnition abstraite


Le type abstrait Liste dnit les quatre oprations de base suivantes :
longueur : Liste naturel
ieme : Liste entier
supprimer : Liste entier Liste
ajouter : Liste entier Liste
L'opration longueur renvoie le nombre d'lments de la liste. L'opration ieme retourne l'lment d'un
rang donn. Enn, supprimer (resp. ajouter) supprime (resp. ajoute) un lment un rang donn.

5.3.3 Dnition axiomatique


Les axiomes suivants dcrivent les quatre oprations applicables sur les listes. La longueur d'une liste
vide est gale zro. L'ajout d'un lment dans la liste augmente sa longueur de un, et sa suppression
la rduit de un.
l Liste; ete
longueur(listevide) = 0
r; 1 r < longueur(l); longueur(supprimer(l; r)) = longueur(l) 1
r; 1 r longueur(l) + 1; longueur(ajouter(l, r, e)) = longueur(l) + 1
L'opration ieme renvoie l'lment de rang r, et n'est dnie que si le rang est valide.
(4)r; r < 1etr > longueur(l); @e; e = ieme (l, r)
L'opration supprimer retire un lment qui appartient la liste, c'est--dire dont le rang est compris
entre un et la longueur de la liste. Les axiomes suivants indiquent que le rang des lments droite de
l'lment supprim est dcrment de un.
r; 1 r longueur(l)et1 i < r, ieme (supprimer(l, r), i) = ieme (l, i)
r; 1 r longueur(l)etr i longueur(l) 1; ieme (supprimer(l; r); i) = ieme (l; i + 1)
r; r < 1etr > longueur(l); @l0 ; l0 = supprimer(l, r)
L'opration ajouter insre un lment un rang compris entre un et la longueur de la liste plus un. Le
rang des lments la droite du rang d'insertion est incrment de un. r; 1 r longueur(l) + 1et1
i < r; ieme (ajouter(l, r, e), i) = ieme (l, i)
r; 1 r longueur(l) + 1etr = i; ieme (ajouter(l; r; e); i) = e
r; 1 r longueur(l) + 1etr < i longueur(l) + 1; ieme ((ajouter, r, e), i) = ieme (l, i 1)
r; r < 1etr > longueur(l) + 1; @l0 ; l0 = ajouter(l, r, e)

5.4 Implimentation
5.4.1 Implmentation contigu(Utilisation d'un tableau)
La mthode qui vient en premier l'esprit, lorsqu'on mmorise les lments d'une liste dans un
tableau, est de conserver systmatiquement le premier lment la premire place du tableau, et de ne
faire varier qu'un indice de n de liste.
L'encodage des listes (version itrative) utilise des tableaux :
 Une liste est reprsente par un tableau de taille n et un entier qui reprsente la taille de la liste ;
 La liste vide est donc un tableau de taille n (comme toutes les autres) dont les valeurs n'ont pas
d'importance et dont la taille est 0 .

Algorithmique et Structures de Donnes

Ismail Hadjadj

30

la dnition de la structure liste est donc :


type liste=enregistrement

tab:tableau[1..n]d'lment
lg:entier

n
L'algorithme de l'opration ime est trs simple, puisque le tableau permet un accs direct l'lment
de rang r. La complexit de cet algorithme est donc O(1).

Fonction ieme(l :liste,r :entier) :lment


Var :
dbut
si (r<=l.lg)& (r>=1) alors
ieme l.tab[r]

n

nsi

L'opration de suppression d'un lment de la liste provoque un dcalage des lments qui se situent
droite du rang de suppression. Pour une liste de n lments, la complexit de cette opration est O(n),
et l'algorithme qui la dcrit est le suivant :

Procdure supprimer(var l :liste ;r :entier)


Var : i :entier
dbut
si (r<=l.lg)& (r>=1) alors
pour i r l.lg-1 faire
l.tab[i] l.tab[i + 1]

npour
nsi
n

l.lg l.lg 1

L'opration d'ajout d'un lment e au rang r consiste dcaler d'une position vers la droite tous les
lments partir du rang r. Le nouvel lment est insr au rang r. le procdure ajouter doit vrier si
le tableau tab dispose d'une place libre avant d'ajouter un nouvel lment. Comme pour l'opration de
suppression, la complexit de cet algorithme est O(n). L'algorithme est le suivant :

Procdure ajouter(var l :liste ;e :lment ;r :entier)


Var : i :entier
dbut
si (r<=l.lg+1)& (r>=1) alors
pour i l.lg r-2 faire
l.tab[i + 1] l.tab[i]

npour
nsi
n

l.tab[r] e
l.lg l.lg + 1

Il est important de remarquer que la suppression de l'lment de tte est trs coteuse puisqu'elle
provoque un dcalage de tous les lments de la liste. Ainsi pour des raisons d'ecacit, il sera prfrable
de grer le tableau de faon circulaire.

Algorithmique et Structures de Donnes

Ismail Hadjadj

31

La gestion circulaire du tableau se fait l'aide de deux indices : un indice de tte qui dsigne le premier
lment de la liste, et un indice de queue qui indique l'emplacement libre aprs le dernier lment de la
liste.
la dnition de la structure liste est donc :
type liste=enregistrement

tab:tableau[1..n]d'lment
lg:entier
tete,queue:entier

n
Les indices de tte ou de queue sont incrments ou dcrments de un chaque ajout ou suppression.
Lorsqu'on incrmente un indice en n de tableau, sa prochaine valeur est alors l'indice du premier
composant du tableau. De mme, lorsqu'on dcrmente un indice en dbut de tableau, sa prochaine
valeur est alors l'indice du dernier composant du tableau.
les procedures et fonctions sont crits comme suite :

Fonction ieme(l :liste,r :entier) :lment


Var :
dbut
si (r<=l.lg)& (r>=1) alors

ieme l.tab[((l.tete + r 2)mod n) + 1]

n

nsi

Algorithmique et Structures de Donnes


Procdure suprimmer(var l :liste ;r :entier)
Var : i :entier
dbut
si (r<=l.lg)& (r>=1) alors
si r==l.lg alors
si l.queue = 1 alors
l.queue n

sinon

l.queue l.queue 1

nsi
sinon
si r==1 alors
si l.tete = n alors
l.tete 1

sinon

l.tete l.tete + 1

nsi
sinon
pour i l.tete + r l.tete + l.lg 1 faire
l.tab[(i 2 mod n) + 1] l.tab[(i 1 mod n) + 1]

npour
si l.queue = 1 alors
l.queue n

sinon

l.queue l.queue 1

nsi
nsi
nsi

l.lg l.lg 1

n

nsi

Ismail Hadjadj

32

Algorithmique et Structures de Donnes

Ismail Hadjadj

33

Procdure ajouter(var l :liste ;e :lment ;r :entier)


Var : i :entier
dbut
si (r<=l.lg+1)& (r>=1) alors
si r==l.lg+1 alors
l.tab[l.queue] e
si l.queue = n alors
l.queue 1

sinon

l.queue l.queue + 1

nsi
sinon
si r==1 alors
si l.tete = 1 alors
l.tete n

sinon

l.tete l.tete 1

nsi

l.tab[l.tete] e

sinon
pour i l.tete + l.lg l.tete+r-2 faire
l.tab[(i 1 mod n) + 1] l.tab[(i 2 mod n) + 1]

npour

l.tab[l.tete + r 1] e

nsi
nsi

l.lg l.lg + 1

n

nsi

5.4.2 Implmentation chanes(Utilisation d'une structure chane)


Une structure chane est une structure dynamique forme de noeuds relis par des liens.
Pour reprsenter une liste. les noeuds sont reprsents par des botes rectangulaires,et les liens par des
ches.
L'encodage des listes (version chanes) utilise des pointeurs :
type cellule=enregistrement

Info:lment
suivant:^ cellule

n
type liste=^cellule

Avec cette structure chane, les oprations longueur, ime, supprimer, et ajouter ncessitent toutes
un parcours squentiel de la liste et possdent donc une complexit gale O(n).

Algorithmique et Structures de Donnes

Ismail Hadjadj

34

Fonction longueur(l :liste) :entier


Var : i :entier
dbut
i0

tant que l<>nil faire


ii+1
l l .suivant

ntq
n

longueur i

On peut crire une version rcursive de cette fonction comme suit :

Fonction longueur(l :liste) :entier


dbut
si l=nil alors
longueur 0

sinon

longueur 1 + longueur(l .suivant)

n

nsi

On atteint le noeud de rang r en appliquant r 1 fois l'opration Suivant partir de la tte de liste.
L'algorithme de l'opration ime s'crit :

Fonction ieme(l :liste ;r :entier) :lment


Var : i :entier
dbut
si (r<=longueur(l))& (r>=1) alors
pour i 1 r 1 faire
l l .suivant

npour

ieme l .inf o

n

nsi

Toujour on peur crire des algorithmes rcursive :

Fonction ieme(l :liste ;r :entier) :lment


dbut
si (r<=longueur(l))& (r>=1) alors
si r==1 alors
ieme l .inf o

sinon

ieme ieme(l .suivant, r 1)

n

nsi
nsi

La suppression d'un lment de rang r consiste aecter au lien qui le dsigne la valeur de son lien
suivant. Notez que si r est gal un, il faut modier la tte de liste.

Algorithmique et Structures de Donnes

Ismail Hadjadj

35

Procdure suprimmer(var l :liste ;r :entier)


Var : i :integer
t,q :liste

dbut
si (r<=longueur(l))& (r>=1) alors
si r=1 alors
l l .suivant

sinon

tl
q nil
pour i 1 r 1
qt
t t .suivant

faire

npour

q .suivant t .suivant

n

nsi
nsi

On remarque que pour supprimer un lment de rang r, il sut de supprimer l'lment de rang r 1
de la sous-liste qui commence par le suivant de la tte. alors on peut traduire ceci par l'algorithme :

Procdure suprimmer(var l :liste ;r :entier)


Var :
dbut
si (r<=longueur(l))& (r>=1) alors
si r=1 alors
l l .suivant

sinon

supprimer(l .suivant, r 1)

n

nsi
nsi

L'ajout d'un lment e au rang r consiste crer un nouveau noeud c initialis la valeur e, puis
relier le noeud de rang r 1 c, et enn relier le noeud c au noeud de rang r. Si l'lment est ajout
en queue de liste, son suivant est la valeur nil. Comme prcdemment, si r = 1, il faut modier la tte
de liste.

Algorithmique et Structures de Donnes

Ismail Hadjadj

36

Procdure ajouter(var l :liste ;e :lment ;r :entier)


Var : i :integer
t,q :liste
c : cellule

dbut
si (r<=longueur(l))& (r>=1) alors
new(c)
c .inf o e

si r=1 alors

c .suivant l
lc

sinon

tl
q nil
pour i 1 r 1
qt
t t .suivant

faire

npour

c .suivant t
q .suivant c

n

nsi
nsi

Comme dans la procdure supprimer la procdure ajouter peut se traduire en sa version itrative
suivante :
Procdure ajouter(var l :liste ;e :lment ;r :entier)
Var : c : cellule

dbut
si (r<=longueur(l))& (r>=1) alors
si r=1 alors
new(c)
c .inf o e
c .suivant l
lc

sinon

ajouter(l .suivant, e, r 1)

n

nsi
nsi

Algorithmique et Structures de Donnes

5.5 Exercices
5.5.1 Exercice 01 :

Pointeurs

Considrer l'algorithme suivant :


si a se trouve #300540 et b #202100

Algorithme 12: Pointeurs


Var : a,b,c :entier

p_x, p_y, p_z : entier

dbut

n

a 4;
b 12;
c 23;
p_x Addr(a)
p_y Addr(b)
p_z p_y
p_x p_x +2
p_y p_y +1
cc+3

- Faites tourner cet algorithme dans un tableau (de 6 colonnes bien sur).

5.5.2 Exercice 02 :

Pointeurs

Considrons le programme suivant :


Algorithme 13: Pointeurs2
Var : A :tableau[1..9]d'entier
p : entier

dbut

n

A {12, 23, 34, 45, 56, 67, 78, 89, 90}


pA

Quelles valeurs ou adresses fournissent ces expressions ?

1. p + 2
2. (p + 2)
3. p + 1

4. Addr(A[4]) - 3
5. A + 3
6. Addr(A[7]) - p

7. p + (p - 10)

8. ( p + (p + 8) - A[7])

Ismail Hadjadj

37

Algorithmique et Structures de Donnes


5.5.3 Exercice 03 :

Ismail Hadjadj

38

les listes

L'encodage des listes vu en cours (version itrative) utilise des tableaux :


 Une liste est reprsente par un tableau de taille n et un entier qui reprsente la taille de la liste ;
 La liste vide est donc un tableau de taille n (comme toutes les autres) dont les valeurs n'ont pas
d'importance et dont la taille est 0 .
la dnition de la structure liste est donc :
type liste=enregistrement

tab:tableau[1..n]d'lment
lg:entier

n

crivez les fonctions suivantes :


 liste() qui renvoie la liste vide ;
 vide(l) qui renvoie vrai si la liste l est vide et faux sinon ;
 cons(r, l) qui renvoie la liste commenant par l'lment r suivi de la queue l ;
 tete(l) qui renvoie le premier lment de la liste l ;
 queue(l) qui renvoie la queue de la liste l.
(ces fonctions sont toutes trs simples crire, il ne faut pas plus de 3 lignes pour chacune)

5.5.4 Exercice 04 :les

listes

crivez les fonctions un peu plus avances suivantes :


 occ(x, l) qui compte le nombre doccurrences de x dans la liste l ;
 concatener(l, l0 ) qui fusionne le sdeux liste l et l0 ;
 recherche(x, l) qui renvoi le rang de l'lment x de la lsite l s'il existe , et -1 sinon ;

5.5.5 Exercice 05 :les

listes

Rcrivez les fonctions des exercices 03 et 04 dans le cas d'une liste circulaire.

5.5.6 Exercice 06 :Algorithmes de base


Ecrire les algorithmes de base suivants sur les listes linaires chanes :
1. Suppression par valeur.
2. Inversement d'une liste.
 En crant une nouvelle liste
 Sans crer une nouvelle liste (En Inversant le chainage des mmes maillons)
3. Tri par la mthode des bulles
4. Recherche de l'lment qui a le plus grand nombre d'occurrences

5.5.7 Exercice 07 :Un peu avancs


Soit une liste linaire chane contenant des nombres entiers et dont la tte est l :
1. Ecrire la fonction tete(l) qui retourne la valeur du premier lment de la liste.
2. Ecrire la fonction sanst ete(l) qui retourne la liste sans le premier lment.
3. Ecrire la fonction cons(l, r) qui retourne une liste dont le premier lment est l'lment du rang r
et le reste est la liste l.

Algorithmique et Structures de Donnes

Ismail Hadjadj

39

4. Ecrire la fonction triee(L) qui retourne vrai si la liste l est trie dans l'ordre croissant et faux
sinon.
5. Ecrire la fonction f usion(l1, l2) qui prend deux listes tries dans l'ordre croissant l1 et l2 et
retourne une liste trie, dans le mme ordre, contenant les deux listes et cela en utilisant les
fonctions prcdentes.

5.5.8 Exercice 08 : Dirence de deux listes linaires chanes


Soient l1 et l2 deux listes linaires chanes . Ecrire la procdure qui permet de construire la liste
l = l1 l2 contenant tous les lments appartenant l1 et n'appartenant pas l2.

5.5.9 Exercice 09 : Raliser le chanage arrire d'une liste doublement cha-

ne

Concevoir un sous-algorithme qui ralise le chanage arrire d'une liste doublement chane dont seul
le chanage avant a t eectu.

Algorithmique et Structures de Donnes

Ismail Hadjadj

40

5.6 TP : Dictionnaire
L'objective de ce TP est de vous formalisez avec l'implmentation des listes chanes
an de les utilises pour rsoudre des problmes.
Notez bien :

 La date de remise de ce TP (Un rapport de 3 pages


 Il est recommander d'utiliser le compilateur Dev-c++ ;

max + sources) est xe le : ..............

5.6.1 Problme
Pour grer un dictionnaire. nous avons besoin d'eectuer les oprations suivantes :
 lecture d'un ensemble de mots et de leur dnition d'un chier, et les stocks dans une structure
explique en dtail plus bas ;
 trier les mots dans l'ordre alphabtique ;
 insrer un nouveau mot dans un dictionnaire dans l'ordre ;
 supprimer un mot du dictionnaire ;
 chercher un mot dans le dictionnaire ;
 acher le mots s'il est trouver.
Pour ce TP, un chier texte contenant les mots et leurs dnitions sera fourni.
Un programme exemple sera aussi donn pour montrer comment lire un chier texte ligne par ligne.
Vous devez adapter ce programme dans votre mthode de lecture.

5.6.2 Implmentation
Pour stocker le dictionnaire, on vous demande d'utiliser la structures de donnes Liste ; notre liste
contient un maillon qui contient deux chane de caractre(l'un pour le mot et l'autre pour sa dnition)
et un pointeur au mot suivant

tte mot1 dnition1 - mot2 dnition2 - nil


On dsire dans ce TP de crer une bibliothque listes.h qui contient la dnition de la structure liste
linaire simplement chane (Vue en cours) et les fonctions et procdure suivants :
 liste creer() : Le constructeur d'une liste vide ;
 intest_vide(liste l) : Qui teste si la liste est vide ou non ;
 void lire(String nom) : Ce procdure permet de lire toutes les lignes d'un chier (dont le nom
est spcier par le paramtre) contenant un mot dans chaque deux lignes, et ajouter les mots et
les dnitions la n de liste correspondante dans le dictionnaire. Dans le chier, le mot est mis
dans le premier ligne , et ensuite on a un String pour sa dnition dans le deuxime ligne.
 void trier() : Ce procdure permet de trier la liste ;
 liste ajouter(String mot, String def inition) ;
 liste supprimer(String mot, String def inition) ;
 String recherche(String mot) : Doit retourner la dnition (un String) correspondent au mot. Si
le mot n'existe pas dans le dictionnaire, elle retourne N U LL. ;
 void af f icher() : IL ache les mots et les dnitions dans l'ordre. Le format d'impression est :
une ligne pour un mot. Vous devez utiliser la rcursion dans cette mthode.
crivez en n une application en utilisant les opration dnit ultrieurement.

Chapitre 6
Les Piles

6.1 Introduction
Une pile est une squence d'lments accessibles par une seule extrmit appele sommet. Toutes les
oprations dnies sur les piles s'appliquent cette extrmit. L'lment situ au sommet s'appelle le
sommet de pile.
L'ajout et la suppression d'lments en sommet de pile suivent le modle dernier entr premier sorti
(LIFO). Les piles sont des structures fondamentales, et leur emploi dans les programmes informatiques
est trs frquent. Nous avons dj vu que le mcanisme d'appel des sous-programmes suit ce modle de
pile. Les logiciels qui proposent une fonction undo servent galement d'une pile pour dfaire, en ordre
inverse, les dernires actions eectues par l'utilisateur. Les piles sont galement ncessaires pour valuer
des expressions postxes.

6.2 Dnition abstraite


6.2.1 Ensembles
P ile est l'ensemble des piles dont les lments appartiennent un ensemble E quelconque. Les
oprations sur les piles seront les mmes quelle que soit la nature des lments manipuls. La constante
pilevide reprsente une pile vide.
P ile utilise E et booleen
pilevide P ile

6.2.2 Description fonctionnelle


Quatre oprations abstraites sont dnies sur le type Pile :
empiler : P ile X E P ile
depiler : Pile P ile
sommet : Pile E
est vide? : Pile booleen
Le rle de l'opration empiler est d'ajouter un lment en sommet de pile, celui de dpiler de supprimer
le sommet de pile et celui de sommet de renvoyer l'lment en sommet de pile. Enn, l'opration
est vide? indique si une pile est vide ou pas.




6.2.3 Description axiomatique


La smantique des fonctions prcdentes est dnie formellement par les axiomes suivants :
41

Algorithmique et Structures de Donnes

Ismail Hadjadj

42

p P ile ; e E
(1) est vide?(pilevide) = vrai
(2) est vide?(empiler(p; e)) = f aux
(3) depiler(empiler(p; e)) = p
(4) sommet(empiler(p; e)) = e
(5) @p; p = depiler(pilevide)
(6) @e; e = sommet(pilevide)
Notez que ce sont les axiomes (3) et (4) qui dnissent le comportement LIFO de la pile. Les
oprations dpiler et sommet sont des fonctions partielles, et les axiomes (5) et (6) prcisent leur domaine
de dnition ; ces deux oprations ne sont pas dnies sur une pile vide.

6.3 implmentation
La complexit des oprations de pile est O(1) quelle que soit l'implantation choisie, tableau ou
structure chane. L'implantation doit donc assurer un accs direct au sommet de la pile.

6.3.1 Utilisation des tableaux (Implmentation Contigu)


L'encodage des piles (version itrative) utilise des tableaux :
 Une P ile est reprsente par un tableau de taille n et un entier qui reprsente l'indice de sommet
de la pile ;
 pilevide est donc un tableau de taille n (comme toutes les autres) dont les valeurs n'ont pas
d'importance et dont l'indice de sommet est 0 .
la dnition de la structure pile est donc :
type pile=enregistrement

tab:tableau[1..n]d'lment
sommet:entier

n

Les algorithmes des oprations de pile sont trs simples. L'opration sommet consiste retourner l'lment de queue, alors que depiler et empiler consistent, respectivement, supprimer et ajouter en
queue.

Algorithmique et Structures de Donnes

Ismail Hadjadj

6.3.2 Utilisation des pointeurs (Implmentation chane)


L'encodage des piles (version chanes) utilise des pointeurs :

type cellule=enregistrement

Info:lment
suivant:^ cellule

n
type pile=^cellule

Les algorithmes des oprations de pile sont les suivant :

43

Algorithmique et Structures de Donnes

Ismail Hadjadj

44

6.4 Exercices
6.4.1 Exercice 02 :Algo. de base sur les Piles
Ecriver les sous-algorithmes suivants :
1. Suppression de l'ime lment ;
2. Recherche d'un lment ;
3. Concatner deux piles ;
4. Eclater une pile en deux : l'une pour les lments paire, et l'autre pour les lments impaire.

6.4.2 Exercice 03 :Un peu avancs


En utilisant une pile, crivez un sous-algorithme qui vrie si un texte lu sur l'entre standard
est correctement parenths. Il s'agit de vrier si chaque parenthseur fermant rencontr },],) ou
correspond son parenthseur ouvrant },[ ou (.
Le sous-algorithme crit sur la sortie standard Vrai ou Faux selon que le texte est correctement
parenths ou pas.

6.4.3 Exercice 03 : Inverser pile et le


Concevoir deux sous-algorithmes, qui crent respectivement :
 la le inverse d'une le ;
 la pile inverse d'une pile.
Ces deux sous-algorithmes doivent restituer leur entre inchange.

Chapitre 7
Les Files

7.1 Introduction
Les les dnissent le modle premier entr premier sorti (FIFO). Les lments sont insrs dans
la squence par une des extrmits et en sont extraits par l'autre. Ce modle correspond la le
d'attente que l'on rencontre bien souvent face un guichet dans les bureaux de poste, ou une caisse
de supermarch la veille du week-end. tout moment, seul le premier client de la le accde au guichet
ou la caisse.
Le modle de le est trs utilis en informatique. On le retrouve dans de nombreuses situations,
comme, par exemple, dans la le d'attente d'un gestionnaire d'impression d'un systme d'exploitation.

7.2 Dnition abstraite


7.2.1 Ensembles
F ile est l'ensemble des les dont les lments appartiennent l'ensemble E , et la constante f ilevide
reprsente une le vide.
F ile utilise E et booleen
f illevide F ile

7.2.2 Description fonctionnelle


Quatre oprations sont dnies sur le type File :
enf iler : F ile X E F ile
def iler : F ile F ile
dernier : F ile E
est vide? : F ile booleen
l'Opration enf iler a pour rle d'ajouter un lment en queue de le, et l'opration def iler supprime
l'lment en tte de le. dernier retourne le dernier lment de la le et est vide? indique si une le est
vide ou pas. Notez que les signatures de ces oprations sont, au mot F ile prs, identiques celles des
oprations du type abstrait P ile. Ce sont bien les axiomes qui vont direncier ces deux types abstraits.




7.2.3 Description axiomatique


Ce sont en particulier, les axiomes (3) et (4), d'une part, et (5) et (6) d'autre part, qui distinguent
le comportement de la le de celui de la pile. Ils indiquent clairement qu'un lment est ajout par une
extrmit de la le, et qu'il est accessible par l'autre extrmit.
45

Algorithmique et Structures de Donnes

Ismail Hadjadj

46

f F ile ; e E
(1) est vide?(f ilevide) = vrai
(2) est vide?(enf iler(f ; e)) = f aux
(3) est vide?(f ) dernier(enf iler(f ; e)) = e
(4) non est vide?(f ) dernier(enf iler(f ; e)) = dernier(f )
(5) est vide?(f ) def iler(enf iler(f ; e)) = f ilevide
(6) nonest vide?(f ) def iler(enf iler(f ; e)) = enf iler(def iler(f ); e)
(7) @f ; f = def iler(f ilevide)
(8) @e; e = dernier(f ilevide)

7.3 implantation
7.3.1 Utilisation des tableaux (Implmentation Contigu)
au contraire de celle de P ile, l'implantation de l'interface F ile (version itrative) utilise des tableaux
circulaire Pour que ces oprations gardent une complexit gale O(1) :
 Une F ile est reprsente par un tableau de taille n et deux entier qui reprsentent, respectivement
l'indice de premier et dernier lment de la le ;
 f ilevide est donc un tableau de taille n (comme toutes les autres) dont les valeurs n'ont pas
d'importance et dont les indices de premier et dernier lment est 0 .
la dnition de la structure le est donc :
type le=enregistrement

tab:tableau[1..n]d'lment
premier, dernier:entier

n

Algorithmique et Structures de Donnes

Ismail Hadjadj

7.4 Exercices
7.4.1 Exercice 01 :
- Que peut bien vouloir dire FIFO ?

7.4.2 Exercice 02 :Algo. de base sur les Files


Ecriver les sous-algorithmes suivants :
1. Suppression de l'ime lment ;
2. Recherche d'un lment ;
3. Concatner deux les ;
4. clater une le en deux : l'une pour les lments paire, et l'autre pour les lments impaire.

7.4.3 Exercice 03 :Un peu avancs


- Montrez comment implmenter une pile l'aide de deux les.
- Montrez comment implmenter une le l'aide de deux piles.

7.4.4 Exercice 03 : Inverser une le


Concevoir deux sous-algorithmes, qui crent respectivement :
 la le inverse d'une le ;
 la le inverse d'une le en utilisant une le auxiliaire.

47

S-ar putea să vă placă și