Vous êtes sur la page 1sur 19

AU13-14 / 1LR3-1LR5

06/03/2014

M.Hadjouni

53

Rappel sur les variables statiques

Ce qui a t vu?
variables de type simple (entier, rels, caractre, etc.)
variables de type tableau(array), enregistrement (record)

Que se passe til lorsquon dclare ?


var N: entier
un certain espace, dsign par son adresse dans la mmoire est
associ la variable N
association faite par le compilateur (avant lexcution du
programme)
les occurrences de N dans le programme sont remplaces par
ladresse de la variable
lexcution toutes ces adresses sont fixes
allocation statique

54

M.Hadjouni

Variable Dynamique
Cest quoi?
Cest une variable pouvant tre alloue
pendant lexcution, au moment o il y en a
besoin! sous le contrle du programme au
moyen dinstructions spciales.
On

parle

alors

dallocation

dynamique

(contrle),

M.Hadjouni

Hajdouni M.

pointeurs

55

AU13-14 / 1LR3-1LR5

06/03/2014

Les pointeurs
Un pointeur est une variable qui contient l'adresse d'une
autre variable.
L'adresse contenue dans un pointeur est celle d'une
variable qu'on appelle variable pointe.

On dit que le pointeur pointe sur la variable dont il


contient l'adresse.

56

M.Hadjouni

Les pointeurs
Lille

La notion de pointeur
permet la construction de
structures de donnes :

30 km
220 km
Lens
200 km

dynamique (dont la
forme et la taille
peuvent voluer en
cours dexcution)
chanes (les objets sont
chanes entre eux)

210 km
Paris

Caen
800 km

700 km

650 km

Toulouse

Nice

200 km
Marseille

57

M.Hadjouni

200 km

Les pointeurs

Une variable est dfinie par :


Un nom
Un type
Un emplacement mmoire rserv une adresse prcise

Un pointeur sur un type T est une variable qui


contient ladresse mmoire dune variable de type T
Mmoire
Pointeur p

Variable x

M.Hadjouni

Hajdouni M.

58

AU13-14 / 1LR3-1LR5

06/03/2014

Les pointeurs: dclaration

La mise en place dune variable dynamique se


droule en trois tapes :
1. Dclaration de la variable pointeur
2. Initialisation de la variable pointeur et/ou allocation de la variable
dynamique (pointe)
3. Utilisation de la variable dynamique

59

M.Hadjouni

Les pointeurs: dclaration

1. Dclaration :

Types
nom_pointeur = ^typeObjet
Variables
P = nom_pointeur
Types
Syntaxe Examens

nom_pointeur = PointeurSur typeObjet


Variables
P : nom_pointeur
60

M.Hadjouni

Les pointeurs: dclaration

1. Dclaration :
2. Initialisation et/ou allocation :
a) initialisation de la variable pointeur et allocation de la variable
dynamique (pointe) :
rservation dune zone mmoire correspondant une variable de type
typeObjet et enregistre dans p ladresse de cette zone.

Allouer (P)

Syntaxe Examens

M.Hadjouni

Hajdouni M.

Allouer (P): type_pointeur

61

AU13-14 / 1LR3-1LR5

06/03/2014

Les pointeurs: dclaration

1. Dclaration :
2. Initialisation et/ou allocation :
b) initialisation de la variable pointeur par l adresse dune autre
variable:

P^

Q^

On affecte le contenu de la variable vers laquelle pointe Q au


contenu de la variable vers laquelle pointe P

Une variable dynamique pointe par P sera note P^.


Le type de la variable pointe est appel type de base.
62

M.Hadjouni

Les pointeurs: exemple

Types
pointeur = ^entier
Variables
P = pointeur
n, x: entiers
Dbut

p
?

20

20

adresse de n

20

P^

20

20

30

30

20

adresse de x

30

20

Fin

M.Hadjouni

63

Les structures de donnes

Permettent de relier entre elles des donnes, comme les


tableaux et les enregistrements.

Classes en deux grandes catgories:


Les structures de donnes linaires: permettent de
relier des donnes en squence (on peut numroter les
lments).
Les structures de donnes non linaires: permettent
de relier un lment plusieurs autres lments.

M.Hadjouni

Hajdouni M.

64

AU13-14 / 1LR3-1LR5

06/03/2014

Les structures de donnes

Principales structures de donnes


Binaire
Arbres
n-aire
NON
LINEAIRES

Graphes
Enregistrements
Tableaux

Piles
simple
chanage

LINEAIRES
Listes chanes

Files
double
chanage
65

M.Hadjouni

Les structures de donnes

Un arbre permet de reprsenter des structures hirarchiques. Chaque


lment (appel nud) a un seul pre et plusieurs enfants.
Dans une liste chane, les lments sont relis grce un pointeur. Le
pointeur indique

ladresse de llment suivant. Les lments ne sont

pas forcment contigus en mmoire, contrairement aux lments des


tableaux.
Un graphe permet de relier des lments deux deux de faon
quelconque. Cela permet, par exemple, de raliser des calculs
doptimisation tels que le PERT.

M.Hadjouni

66

Les structures de donnes

Les structures de donnes dynamiques sont celles dont


les lments sont mmoriss dans le tas et non dans la pile.
Cela permet de rserver des emplacements dynamiquement
lexcution et non statiquement la compilation.
Les structures de donnes dynamiques sont :
- Les listes chanes
- Les arbres
- Les graphes

M.Hadjouni

Hajdouni M.

67

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes

Listes dlments dont le nombre volue dynamiquement


pendant lexcution de lalgorithme :

Les lments sont de mme type


Chaque lment est reli au suivant par un pointeur
Le dbut de la liste est repr par un pointeur sur le 1er lment
La fin de la chane est repre par la valeur Nil du pointeur sur le suivant dans
le dernier lment.
Mmoire
Pointeur db

donne

@
donne

donne
donne

donne

68

M.Hadjouni

Les listes chanes


liste
Liste chane
a

cellule

une cellule est compose :


dun lment de la suite
dun lien vers la cellule suivante (pointeur)

une liste chane est compos dun ensemble de


cellule
liste contient ladresse de la premire
cellule; qui son tour contient ladresse
de la cellule suivante, ...
M.Hadjouni

69

Les listes chanes

Deux parties:
Structure pour lentte
Rfrence vers le premier nud
Dautres attributs optionnels
Rfrence vers le dernier nud
Nombre de nuds

Structure pour nud


Structure (ou classe) pour le stockage dune valeur
Rfrence vers le prochain nud
Optionnel:
Rfrence vers le nud prcdent (liste doublement chane)
M.Hadjouni

Hajdouni M.

70

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes


Accs aux champs dune cellule

a
a^.info
a^.suivant

71

M.Hadjouni

Les listes chanes: dclaration

Syntaxe

Pointeur sur

Types
nom_liste_Ch = ^Cellule
Cellule=Struct
Elt: entier
Suiv: Liste
FinStruct
Variables
L: nom_liste_Ch
M.Hadjouni

72

Les listes chanes: oprations

Mise en place :
Dfinition du maillon (crer un type)
Dclaration dun pointeur sur le dbut de la liste et dun pointeur de
parcours
Construction de la liste :
+ Cration dun maillon (allocation dynamique)
+ Insertion dun maillon dans la liste (au dbut, dans la liste, la fin)

Utilisation :
Parcours de la liste

Modification :
Insertion dun maillon dans la liste (idem ci-dessus)
Suppression dun maillon dans la liste (au dbut, dans la liste, la
fin)

M.Hadjouni

Hajdouni M.

73

AU13-14 / 1LR3-1LR5

M.Hadjouni

06/03/2014

74

Les listes chanes: cration


Cration d'une liste chane de n lments de type entier.

M.Hadjouni

75

Les listes chanes: cration

M.Hadjouni

Hajdouni M.

76

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes: parcours

Procdure itrative

77

M.Hadjouni

Les listes chanes: parcours

Procdure rcursive

78

M.Hadjouni

Les listes chanes: parcours

Exercice 1

Soit a = (1, 2, 3), quaffiche la procdure suivante?


Procdure P(a:Liste)
Dbut
Si(a#Nil) Alors
Ecrire(a^.info)

Rsultats : 1 2 3 3 2 1

P(a^.suivant)
Ecrire(a^.info)
FinSi
Fin
M.Hadjouni

Hajdouni M.

79

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes: parcours

Exercice 2

Soit a = (1, 2, 3), quaffiche la procdure suivante?


Procdure P(a:Liste)
Dbut
Si(a#Nil) Alors
P(a^.suivant)

Rsultats : 3 2 3 1 3 2 3

Ecrire(a^.info)
P(a^.suivant)
FinSi
Fin
M.Hadjouni

80

Les listes chanes: Insertion en tte de liste

Etat initial

Etat final

M.Hadjouni

81

Les listes chanes: Insertion en tte de liste

On suppose que la liste initiale contient au moins une cellule.

M.Hadjouni

Hajdouni M.

82

10

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes: Recherche d'un lment


fonction recherche(x : Entier ; L : Liste) : Boolen
Vrifie si llment x figure dans la liste L.
Version itrative
Version rcursive

M.Hadjouni

83

Les listes chanes: Recherche d'un lment

Version itrative
Fonction recherche(x : Entier ; L : Liste) :
Boolen
Variables
P : Liste
trouve : Boolen

M.Hadjouni

84

Les listes chanes: Recherche d'un lment

Version itrative
Dbut
trouve Faux
PL
TantQue (P # Nil) ET (trouve = Faux) Faire
Trouve (P^.Elem = x)
P P^.Suiv
FinTQ
recherche trouve
Fin
M.Hadjouni

Hajdouni M.

85

11

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes: Recherche d'un lment

Version rcursive
Fonction recherche(x : Entier ; L : Liste) : Boolen
Dbut
Si (L = Nil) Alors
recherche Faux
Sinon
Si (L^.Elem = x) Alors
recherche Vrai
Sinon
recherche recherche(x,L^.Suiv)
FinSi
FinSi
Fin
M.Hadjouni

86

Les listes chanes: Suppression d'un lment

En supposant que la valeur x existe une seule fois dans la


liste, supprimer x revient mettre jour les liens de
faon que le successeur du prdcesseur de x devient le
successeur de x.
Un traitement particulier doit tre fait si llment
supprimer est le premier lment de la liste.

M.Hadjouni

87

Les listes chanes: Suppression d'un lment

M.Hadjouni

Hajdouni M.

88

12

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes: Suppression d'un lment

Version itrative
Procdure supprimer(x : Entier ; Var L : Liste)
Variables
P, Q : Liste
Dbut
Si (L # Nil) Alors
PL
Si (L^.Elem = x) Alors
L L^.Suiv
Librer(P)
Sinon
Q L^.Suiv
M.Hadjouni

89

Les listes chanes: Suppression d'un lment

Version itrative
TantQue (Q # Nil) ET (Q^.Elem # x) Faire
PQ
Q Q^.Suiv
FinTQ
Si (Q # Nil) Alors
P^.suiv Q^.Suiv
Librer(Q)
FinSi
FinSi
FinSi
Fin
M.Hadjouni

90

Les listes chanes: Suppression d'un lment

Version rcursive
Procdure supprimer(x : Entier ; Var L : Liste)
Variables
P, Q : Liste
Dbut
Si (L # Nil) Alors
Si (L^.Elem = x) Alors
P L^.Suiv
Librer(L)
LP
Sinon
supprimer(x, L^.Suiv)
FinSi
FinSi
Fin
M.Hadjouni

Hajdouni M.

91

13

AU13-14 / 1LR3-1LR5

06/03/2014

Les listes chanes: Inversion dune liste

Procdure InvertListe(Ls : Liste ; Var Ls_Inv : Liste)


Variables
//Sinon
P,Q : Liste
TantQue (Ls # Nil) Faire
Dbut
Allouer(P)
P^.Elem Ls^.Elem

Si (Ls = Nil) Alors


Ls_Inv Nil
Sinon

P^.Suiv Q
QP
Ls Ls^.Suiv

Allouer(Q)
Q^.Elem Ls^.Elem

FinTQ
Ls_Inv Q

Q^.Suiv Nil
Ls Ls^.Suiv
Si (Ls = Nil) Alors
Ls_Inv Q

FinSi
FinSi
Fin

Sinon

92

M.Hadjouni

Les listes chanage double

Chaque cellule possde deux rfrences


Une vers la cellule suivante
Une vers la cellule prcdente

Le premier n'a pas de prcdent


Le dernier n'a pas de suivant
Permet les parcours en sens inverse
Simplifie certaines manipulations (suppressions)
Plus de liens grer entre les maillons

93

M.Hadjouni

Les listes chanage double

M.Hadjouni

Hajdouni M.

16

suiv

prec

suiv

prec

suiv

prec

suiv

prec

tte

94

14

AU13-14 / 1LR3-1LR5

06/03/2014

Les piles

Exemples: pile dassiettes, pile dexcution,


Utilisation : sauvegarder temporairement des
informations en respectant leur ordre darrive,
et les rutiliser en ordre inverse
Principe de fonctionnement :
- Dernier arriv, premier servi; "Last In First Out"
- ajout et retrait au sommet de la pile
95

M.Hadjouni

Les piles
sommet
empiler
dpiler

sommet

Sommet

lments
lments
Pile (tableaux)
Pile (liste)
M.Hadjouni

96

6 Les piles : reprsentation par une liste chaine

- les ajouts comme les suppressions se font en tte de pile


- seule linformation de la tte est accessible et traitable
pile dassiettes "dernier rentr, premier sorti"
(LIFO : last in first out, stack)
M.Hadjouni

Hajdouni M.

97

15

AU13-14 / 1LR3-1LR5

06/03/2014

6
Structure dune pile

La structuration dun objet en pile simpose lorsquon


mmorise des informations qui devront tre traites dans lordre
inverse de leur arrive.
Cest le cas, par exemple, de la gestion des adresses de retour
dans lexcution dun programme rcursif.

M.Hadjouni

98

Dclaration

En supposant que les lments de la pile sont des entiers, celleci se dclare de la faon suivante :

M.Hadjouni

99

Manipulation dune pile

4 procdures et fonctions:
Procdure Initialiser(Var P : Pile) : cre une pile vide P
Fonction Pile_Vide (P : Pile) : Boolen : Renvoie la
valeur vrai si la pile est vide.
Procdure Empiler(x : Entier ; Var P : Pile) : ajoute
llment x au sommet de la pile
Procdure Dpiler (Var x : Entier ; Var P : Pile) :
dpile le sommet de la pile et le met dans la variable x
M.Hadjouni

Hajdouni M.

100

16

AU13-14 / 1LR3-1LR5

06/03/2014

Procdure Initialiser
Procdure Initialiser(Var P : Pile)
Dbut
P Nil
Fin

M.Hadjouni

101

Fonction Pile_Vide
Fonction Pile_Vide(P : Pile) : Boolen
Dbut
Pile_Vide (P = Nil)
Fin

M.Hadjouni

102

Procdure Empiler
Procdure Empiler(x : Entier ; Var P : Pile)
Variables
Q : Liste
Dbut
Allouer(Q)
Q^.Elem x
Q^.Suiv P
PQ
Fin
M.Hadjouni

Hajdouni M.

103

17

AU13-14 / 1LR3-1LR5

06/03/2014

Procdure Dpiler

Procdure Dpiler(Var x : Entier ; Var P : Pile)


Dbut
Si NON(Pile_Vide(P)) Alors
x P^.Elem
QP
P P^.Suiv
Librer(Q)
Sinon
Ecrire(impossible, la pile est vide)
FinSi
Fin

104

M.Hadjouni

Les files

Exemple : file dattente, file dimpression,


Utilisation : sauvegarder temporairement des
informations en respectant leur ordre darrive,
et les rutiliser en ordre darrive
Principe de fonctionnement :
- Premier arriv, premier servi; "First In First Out"
- ajout en queue et retrait en tte de la file
105

M.Hadjouni

Les files

dfiler
enfiler
tte

queue

lments
File (tableaux)

M.Hadjouni

Hajdouni M.

tte

tte

queue

queue

lments
File (liste)

106

18

AU13-14 / 1LR3-1LR5

06/03/2014

Les files: reprsentation par une liste chaine

- les ajouts se font en fin de file,


- les suppressions en tte de file
- seule linformation de la tte est accessible et traitable
file dattente un guichet "premier rentr, premier sorti"
(FIFO : first in first out, queue)
107

M.Hadjouni

Les files: Implmentation par tableau

Enfile

Empile

M.Hadjouni

Hajdouni M.

108

19