1
Représentation des données
Définition:
Unestructure de données (SDD) est une
organisation des données pour en faciliter l’accès
et la modification vis-à-vis d’un problème donné.
Elle est définie par le type de base des composants
ainsi que les opérations que l’on peut leur
appliquer.
2.
2
Représentation des données
Exemple
les structures séquentielles: listes, piles, files
les structures arborescentes: arbres
les structures relationnelles: graphes
les structures à accès par clé: tables
3.
3
Choix de lastructure de données
La manière de représenter les données en
mémoire doit respecter deux contraintes:
1. Utiliser un minimum d’espace mémoire
2. Exécuter un nombre minimal d’instructions
pour réaliser une opération
Remarque:
Le choix de bonnes (SDD) et de bons algorithmes
peut faire la différence entre un programme
s’exécutant en quelques secondes ou en quelques
jours.
4.
4
Représentation contiguë
Un tableauest une SDD :
Un ensemble d'éléments accessibles par leur
indice
On le retrouve dans tous les langages de
programmation
Tous les éléments d'un tableau doivent être du
même type
L'accès à un élément par son indice est direct :
les éléments d'un tableau sont contigus dans
l’espace mémoire
5.
5
Représentation contiguë
Exemple :Soit E={3, 21, 6, 13, 68, -4, 29}
Cet ensemble peut être représenté par un tableau
T schématisé comme suit :
Tel que :1, 2, …,7 représentent les indices.
On calcul l’adresse du ième
élément par :
@T[i]= @T[1] + (i-1)* Taille_du_type
T[3]= @T[1] + 2* 4 (entier représenté sur 4 octets )
T[3]= 300+ 2* 4 = 308 (exp: @ de T[1] = 300)
3 21 6 13 68 -4 29
T
1 2 3 4 5 6 7
6.
6
Inconvénients de lareprésentation contiguë
Taille : doit être connu au moment de l'écriture
de l’algorithme: le nombre de données que devra
recevoir le tableau
Cellules contiguës : les opérations d'insertion et
de suppression d'éléments nécessitent de faire
des décalages
L’insertion peut être impossible si le tableau est
plein
7.
7
Représentation Chaînée
Une listechaînée est une (SDD) qui permet de
stocker une suite d’éléments de même type.
Chaque élément est stocké dans une cellule
représentée par un enregistrement qui contient,
en plus d’un élément (entier, réel, caractère,…),
l’adresse de la cellule suivante (successeur), ce qui
permet de chainer les cellules entre elles.
50 - 5 12
nil
tete
300
8.
8
Représentation Chaînée
Avantages:
Agrandirla liste revient à créer un nouvel
élément en mémoire et à le lier à la liste chaînée
par une référence (adresse) vers son emplacement
mémoire.
On peut insérer ou supprimer une valeur
n'importe où dans la liste, sans algorithme de
décalage .
50 - 5 12
nil
tete
300
15
9.
9
Représentation Chaînée
Inconvénient :
L’accès aux éléments d’une liste se fait de
manière séquentielle d’où, un algorithme de
parcours.
La représentation chainée consomme toujours
plus d’octers par rapport à la représentation avec
un tableau.
50 - 5 12
nil
tete
300
300 200 100
10.
10
Allocation de lamémoire
Chaque variable dans un programme a besoin
d’un certain nombre d’octets en mémoire.
Avec la déclaration des variables:
simple (entier, réels, cara,…)
structuré (tableau, enregistrement)
la réservation de la mémoire se fait de façon
automatique par l’emploi des déclarations des
variables.
Dans tous ces cas, le nombre d’octets à réserver
était déjà connu pendant la compilation.
On parle alors d’allocation statique des variables.
11.
11
Allocation de lamémoire
Souvent, nous devons travailler avec des données
dont nous ne pouvons pas prévoir le nombre et la
grandeur lors de la programmation.
Ce serait alors un gaspillage de réserver toujours
l'espace maximal prévisible.
Il nous faut donc un moyen de gérer
manuellement la mémoire lors de l'exécution du
programme :
réserver des espaces en mémoire, et les
rendre lorsqu'ils ne sont plus utilisés.
On parle alors d’allocation dynamique (contrôlée).
On accède à une variable dynamique grâce à un
pointeur.
12.
12
Les pointeurs
Les pointeurssont des variables qui contiennent
l'adresse d’autres variables d’un type donné.
Si un pointeur P contient l'adresse d'une variable
A, on dit que 'P pointe sur A'.
Déclaration:
<Nom du Pointeur>: ^<typeObjet>;
pte : ^ entier;
ptr : ^ reel;
ptc : ^ cara;
ptr : ^ date_de_naissance;
………..
………..
13.
13
Les pointeurs
Création d'unevariable dynamique
ptr : ^reel;
allouer(ptr);
L’action allouer(ptr) permet de:
réserver un emplacement mémoire de la taille
correspondant au type ptr
mettre dans la variable ptr l'adresse de la zone
mémoire qui a été réservée
accéder à l'emplacement pointé par ptr en
utilisant ptr^
ptr
ptr
400
14.
14
Les pointeurs
ptr :^reel;
Allouer(ptr);
ptr^ <- 12.56;
x, y : réel;
x <- 33,6; y <- 10,7;
Ptr <- @x;
Dans ce cas:
y <- x * 10 ; est équivalente à y <- ptr^ * 10 ;
ptr
ptr
400
ptr
400 12.56
y
x
33,6 10,7
ptr
600
x
15.
15
Les pointeurs
Libérer lazone allouée au pointeur
ptr : ^reel; allouer(ptr);
Cas1:
ptr^ <- 12.56; Libérer(ptr);
Dans ce cas le compilateur récupère l’espace
Cas2:
x, y : réel;
X <- 33,6; y <- 10,7;
Libérer(ptr);
Dans ce cas le compilateur ne récupère pas
l’espace car c’est une variable statique
ptr ptr
400
ptr
400 12.56
y
x
33,6 10,7
ptr
600
16.
16
Les pointeurs
Libérer(ptr);
Onutilise l’adresse spéciale nil (ptr <- nil) pour
dire : aucune adresse mémoire n’est associée à ptr
Il est recommander de faire : ptr <- nil après
l’utilisation de l’action Libérer(ptr) car le pointeur
garde toujours l’adresse de la zone allouée
ptr
400 12.56