Vous êtes sur la page 1sur 51

MODULE: INFORMATIQUE 4 /

STRUCTURE DE DONNÉES
(SMA 4/ SMI 4)

Pr. Yassine SADQI


Université Sultan Moulay Slimane (USMS)
Faculté Polydisciplinaire de Béni Mellal (FPBM)
Département de Mathématiques et Informatique
y.sadqi@usms.ma
Chapitre 1: Structures de données et types
abstraits

19/04/2021 2
Chapitre 1
I. Introduction
II. Définitions et Terminologies
III. Classification des structures de données
IV. Les types complexes hétérogène en C

19/04/2021 3
I. Introduction

19/04/2021 4
I.1 Rappel: Notion de donnée
 Question: Qu’est ce qu’une donnée?
 En programmation une donnée possède (1) un nom,(2)
une valeur, et (3) un type.
 Le nom permet d’identifier de manière unique la donnée
.
 La valeur peut être modifiable (variable) ou constante.
 Le type de données détermine la nature des données
qu'elle peut contenir et la manière dont elles sont
enregistrées et traitées par le programme. En
particulier le type permet d’identifier:
 l’espace mémoire à allouer à la donnée, et

 les opérations autorisées sur la donnée.

19/04/2021 5
I.1 Rappel: Notion de donnée
 Exemple:
 Dans un programme qui manipule des entiers, on
s’intéresse, non pas à la représentation des entiers en
mémoire, mais aux opérations définies sur les entiers :
 Addition: +

 Soustraction: -

 Multiplication: * ,

 Division: /

 Modulo: %

19/04/2021 6
I.1 Rappel: Notion de type de données
 Toute donnée manipulée par le langage C possède forcément un
type. On dit que le langage C est fortement typé.
 Question: Quels sont les types de données du langage C que
vous avez étudié jusqu’à présent?
1. Caractère : un caractère n'est pas numériques par nature mais
bien sûr elles sont représentées de façon numérique dans la
mémoire.
 En langage C, la correspondance entre caractère et valeur
numérique se fait à l’aide d’une table d’encodage ASCII qui
associe à chaque caractère une valeur entière.

19/04/2021 7
I.1 Rappel: Notion de type de données
 La table ci-après contient tous les caractères imprimables
de la norme ASCII de base :

19/04/2021 8
I.1 Rappel: Notion de type de données
 Demo 1: showAsciiCode()

L’exécution du programme affiche le résultat suivant:

19/04/2021 9
I.1 Rappel: Notion de type de données
2. Nombres entiers:
 Le langage C définit 4 types entiers, différenciés par la
quantité d’espace mémoire utilisée pour représenter la
valeur numérique considérée :
 short : 2 octets

 int : en général 2 octets, parfois 4 ou plus (ça dépend


de l’architecture de l’ordinateur)
 long : 4 octets

 char : 1 octet (char est en général utilisé pour stocker


des valeurs numériques qui représentent des
caractères alphanumériques).

19/04/2021 10
I.1 Rappel: Notion de type de données
 De plus, 2 modificateurs peuvent être appliqués à ces quatre
types entiers:
unsigned : entiers naturels

 signed : entiers relatifs

 Les modificateurs affectent l’intervalle des valeurs que l’on peut représenter
avec un type donné.

type octets nombre de valeurs modificateur intervalle de


possibles définition

char 1 28 = 256 unsigned [0, 28 − 1]


signed [−2 7 , 2 7 −1]
short 2 2 2*8 = 65 536 unsigned [0, 216− 1]
signed [-215, 215− 1]
long 4 2 4*8 = 4 294 967 296 unsigned [0, 232− 1]
signed [-231, 231− 1]

19/04/2021 11
I.1 Rappel: Notion de type de données
3. Nombres réels: des données pouvant avoir des chiffres après
la virgule.
 Le langage C définit 3 variante du type réel: float, double, long double
Type Octets intervalle de définition

float 4 [1,5 × 10−45 ; 3,4 × 1038]


double 8 [5 × 10−324 ; 1,7 × 10 308]
long double 10* [3,4 × 10−4932 ; 1,1 × 104932]

Remarque: La taille en mémoire d’un type de donnée en


langage C dépend de l'architecture de l'ordinateur ( 32bits ou
bien 64 bits).

19/04/2021 12
I.1 Rappel: Notion de type de données
 Demo 2:showDataSize()

L’exécution du programme affiche le


résultat suivant:

19/04/2021 13
I.1 Rappel: Notion de type de données
4. Tableaux: Les tableaux sont une suite contigüe de
variables de même type, situées dans un espace contigu
en mémoire.
 L’intérêt des tableaux est de permettre de désigner un
ensemble de valeurs à l’aide d’un seul identificateur.
 un tableau est un type lui-même basé sur un autre type.
Si ce type est un tableau, on a un tableau de tableaux et
on parle de tableau multidimensionnel, sinon, on parle de
tableau unidimensionnel.

Exemple:
short tab [10]
3. La taille du tableau
1. Type des éléments 2. L’identificateur du
du tableau tableau
19/04/2021 14
I.1 Rappel: Notion de type de données
 Attention de ne pas confondre la taille du tableau (nombre
d’éléments) avec l’espace qu’il occupe en mémoire.
 Si le premier élément du tableau est stocké à partir de
l’adresse 𝑎, alors le deuxième sera stocké à partir de
l’adresse 𝑎 + 𝑠, le troisième à partir de l’adresse 𝑎 + 2𝑠, etc.
 Pour un type de données occupant 𝑠 octets en mémoire, un
tableau de taille 𝑛 occupera 𝑛 × 𝑠 octets en mémoire.
 Exemple: short tab [10]
 Question: Quelle est la taille de l’espace occupé par le
tableau « tab »?

19/04/2021 15
I.2 Familles de types de données
 On distingue deux grandes catégories de types de données:

Types de données
(1) (2)

Types primitifs ou Types


simples Composés ou complexes

Types Types
complexes homogène complexes hétérogène

19/04/2021 16
I.2 Familles de Types de données
 Les types de données étudiés jusqu’à présent (Info 1 Info3)
sont des types de données de base, on les appels aussi types
primitifs ou bien types simples ( à l’exception des tableaux).
 Définition: un type primitif est un type de données qui peut
contenir une et une seul information.
 Exemple: int a;
 Questions:
 Comment peut-on représenter une donnée de type Matrice?
 Comment peut-on représenter des données d’un objet
complexe tel qu’une voiture ou bien un étudiant?

Les types de données complexes

19/04/2021 17
I.2 Familles de Types de données
 Définition: Un type de donnée complexe appelé aussi
type composé correspond à une collection de plusieurs
éléments de type primitif ou complexe, et qui possèdent une
structure spécifique autorisant des traitements dédiés à leur
type. Un type complexe peut être soit homogène ou
hétérogène.
 Définition: Un type complexe homogène est un type de
données décrivant une information composite, constituée de
plusieurs valeurs qui sont toutes elles-mêmes du même
type (qui peut être lui même simple ou complexe).
 Exemples: les tableaux en langage C, C++, Java, …
 int tab_entier[29];
 float tab_reel[10];

19/04/2021 18
I.2 Familles de Types de données
 Définition: Un type complexe hétérogène
est un type de données décrivant une
information composite, constituée de plusieurs
valeurs qui peuvent être elles-mêmes de types
différents (qui peuvent être eux-mêmes
simples ou complexes).
 Exemples:
 Les structures en langage C
 Les classes en Java ( Langage Orienté Objet)

19/04/2021 19
II. Définitions et Terminologies

19/04/2021 20
II.1 Notion de structures de données
 Définition: Une Structure de Données (SD), en anglais
Data Structure (DS), est une manière particulière de
stocker et d’organiser des données dans un ordinateur
(en mémoire) de façon à pouvoir être utilisées efficacement
(faciliter l’accès et la modification).
 Une SD regroupe un ensemble:
 de données à gérer,
 d’opérations pouvant être appliquées à ces
données

19/04/2021 21
II.1 Notion de structures de données
 Dans la plupart des cas, il existe:
 plusieurs manières de représenter les données et
 différents algorithmes de manipulation.
 Question: Est-ce que la représentation des données
affecte le résultat final du programme?
 Réponse: Une des tâches principales d’un
développeur informatique est de bien choisir les
structures de données efficaces et adaptées au
problème ciblé.

19/04/2021 22
II.2 Notion d’opérations
 Définition: les opérations représentent les différentes
utilisations possibles de la SD.
 On peut divisé les opérations en trois catégories:
1. les constructeurs (Constructor): ils permettent de
créer une nouvelle SD.
2. les modificateurs (setters) : ils permettent de modifier
les SD et leur contenu.
3. les accesseurs (getters): ils donnent des informations
sur l'état de la SD (valeurs, affichages, …)

19/04/2021 23
II.2 Notion d’opérations
 A bien retenir:
 On ne manipule une SD qu'avec les opérations qui lui
sont associées.
 Exemple:
 Dans un algorithme qui manipule des entiers:
 on s’intéresse, non pas à la
représentation en mémoire des entiers,
mais aux opérations définies sur les
entiers : + ,- , * , /

19/04/2021 24
II.3 Spécification d’une SD
 Définition: Une spécification ou norme technique
est un ensemble explicite d'exigences à satisfaire.
 Une SD est spécifiée selon deux niveaux:
1. Une spécification abstraite ou un Type de
Données Abstrait (TDA) .
2. Une spécification opérationnelle.

19/04/2021 25
II.3.1 Spécification abstraite
 Définition: Un Type de Données Abstraits (TDA)
ou spécification abstraite, Abstract
Data Type (ADT) en anglais, représente la
description des propriétés générales et des
opérations qui décrivent la SD.
 Un TDA spécifie précisément :
1) la nature et les propriétés des données
2) les modalités d’utilisation des opérations
pouvant être effectuées

19/04/2021 26
II.3.1 Spécification abstraite
 Un TDA évite d'imposer des contraintes
d'implantation.
 Nous pouvons distinguer deux sortes de TDA:
1) TDA simples: qui correspondent aux types de base
avec disponibles dans la plupart des langages de
programmation (entier, réel, caractère…).
2) TDA complexes: TDA construits aux moyens de TDA
simples ou bien d’autres TDA complexes prédéfinis.

19/04/2021 27
II.3.1 Spécification abstraite
 A la définition d'un TAD, il faut faire attention à:
 la complétude : A-t-on donné un nombre suffisant
d'opérations pour décrire toutes les propriétés du TDA?
 la consistance (non contradictoire) : N'y a-t-il pas des
compositions contradictoires ?
 Comment bien définir les opérations d'un TAD ?
 Choisir des identifiants significatifs
 Bien préciser les conditions de bon fonctionnement (pré-
conditions) des opérations

19/04/2021 28
II.3.2 Spécification opérationnelle
 Définition: La spécification opérationnelle correspond
à l’implémentation d’un TAD.
 Dans cette phase opérationnelle ,
 les TAD complexes sont implémentés par:
 des structures appelée aussi des
enregistrements dans le cas des langages de
programmation procédurale (langage C, Ada, …)
 classes dans le cas de Programmation Orientée
Objets (POO) tel ques Java et C++.

19/04/2021 29
II.3.2 Spécification opérationnelle
 les opérations de TDA complexes par :
 des fonctions dans le cas des langages de
programmation procédurale (langage C, Ada, …)
 des méthodes si on utilise des langages de
Programmation Orienté Objet (POO).

19/04/2021 30
III. Classification des structures de
données

19/04/2021 31
III.1 Classification des SD
 On peut classer les SD en deux grandes classes:
 Les SD linéaires, qui permettent de relier des données
en séquence (on peut numéroter les éléments):
 Exemples: Tableaux, listes, piles, …

 Les SD non linéaires, qui permettent de relier un


élément à plusieurs autres éléments. Dans cette
catégorie on trouve deux sous-catégories:
 SD arborescentes: les SD de type arbres (en anglais
Tree)
 SD relationnelles: les SD de type graphes

19/04/2021 32
III.2 Quelle structure de données?
 Toutes les structures de données ne permettent pas
les mêmes (1) opérations, et surtout elles n'ont pas
toujours le même (2) coût (complexité).
 Principalement, le choix d'une telle structure doit tenir
compte de:
 la place mémoire consommée par la structure.
 la facilité et le coût (complexité) qu'elle offre pour
accéder a une certaine donnée.

19/04/2021 33
IV. Les types
complexes hétérogène en C

19/04/2021 34
IV.1 Introduction
 En langage C, pour représenter un type de données
complexes hétérogène on utilise les enregistrements
ou on parle aussi de structures en C.
 Définition: Une structure ou enregistrement en C est
un type de données décrivant une information
composite, constituée de plusieurs valeurs qui
peuvent être elles-mêmes de types différents (qui
peuvent être eux-mêmes simples ou complexes).
 Contrairement aux variables stockées dans un tableau
(type complexe homogène), les variables d’une
structure peuvent être de types différents.

19/04/2021 35
IV.1 Introduction
 Exemples:
 Exemple1: un étudiant peut être décrit par:
 Code APOGE

 Nom,

 Prénom

 Adresse
 L’adresse peut être aussi décrit par une structure.
 Exemple 2: un point est une paire de coordonnées, un
rectangle est une paire de points, ...etc.

19/04/2021 36
IV.2 Définition des structures en C
 Afin de définir un nouveau type de données de type
structure en C, le programmeur doit préciser deux choses:
1) le nom donné au structure (identificateur de la
structure);
2) les éléments de la structure, c'est a dire le nom et
types de données qu'il contient.
 La syntaxe en C de définition d'une structure est le suivant:
 struct identifie le début de la structure
 Les accolades {} renferment la liste des
variables membres de la structure struct nom_structure{
type1 var1;
type2 var2;
...
};

19/04/2021 37
IV.2 Définition des structures en C
 Il n’est pas obligatoire de donner un nom à la
structure : on parle alors de structure anonyme.
 Définition: Une structure anonyme est une
structure à laquelle on n’a pas associé
d’identificateur.

struct {
int x;
int y;
};

19/04/2021 38
IV.2.1 Champs d’une structure
 Les données nommées (donn1, donn2, …) sont appelées
membres ou champs de la structure.
 Comme une donnée, un champ possède un (1) type, un (2)
identificateur, une (3) valeur et une (4) adresse.
 Cependant, à la différence d’une donnée , un champ n’est
pas indépendant, car il appartient à un groupe de champs
qui forme sa structure.

struct nom_structure{
type1 donn1;
type2 donn2;
... Champs ou membres de la structure
};

19/04/2021 39
IV.2.2 Exemple
 Un point d'un plan 2-D est caractérisé par ses coordonnées
x et y. Supposant que les coordonnées sont des entiers, la
structure décrivant un point est définie en C par:
struct point{
int x;
int y;
};
 A bien retenir:
 Le mot-clé « struct » peut être suivi d'un nom qu'on
souhaite attribuer à la structure. Dans ce cas, point.
 le mot-clé struct fait partie intégrante du nom du type.

19/04/2021 40
IV.2.2 Exemple
 A bien retenir (suite)
« struct point » constitue le nouveau type de données.
 Ce nom sera utilisé par la suite pour se référer à la
structure (déclaration des variables de ce type).
 Question: Quels sont les types autorisés dans un
champ donnée d’une structure en C?

19/04/2021 41
IV.2.2 Exemple
 Réponse: On peut mettre n'importe quel type pour lequel
la taille est connue par le compilateur.
 On ne peut pas mettre la structure elle-même

struct liste{
Erreur de compilation:
int valeur; le champ ``suivant'' a un
struct liste suivant; type incomplet
};
 On peut mettre comme membre un pointeur sur la
structure elle-même puisque la taille d'un pointeur est
connue.
struct liste{
int valeur;
struct liste * suivant;
};
19/04/2021 42
IV.3 Déclaration des structures en C
 Le langage C nous offre deux façons de déclarer les
variables de types structures:
1) La première consiste à faire suivre la définition
d’une liste de noms d’une seul ou de plusieurs
variables.
2) La seconde méthode consiste à déclarer les
variables de la structure dans une autre partie du
code du programme
struct point{
int x; /* une variable p de type « struct point »*/
int y; struct point p;
} p1, p2, p3 ;

19/04/2021 43
IV.3 Déclaration des structures en C
Exemple:

struct point{  p1, p2, p3 ont été déclarées


int x; avec la définition de la
int y;
} p1, p2, p3 ; structure.
struct point p4, p5;
main(){
 p4, p5, p6 déclarées en
struct point p6; utilisant le nom du nouveau

}
type ‘struct point’.
 p1, p2, p3, p4, p5 sont des
variables globales.
 p6 est une variable locale.

19/04/2021 44
IV.4 Initialisation des champs
 Les champs peuvent être initialisées au moment de
la déclaration de la variable de type structure.
 Les valeurs d'initialisation sont fournies entre
accolades { }
 Exemple: struct point pt1 = {20,30};
x reçoit 20 et y reçoit 30.
 A bien retenir:
 L'affectation des initialisations suit l'ordre d'apparition des
champs dans la structure.
 La Nième valeur est affectée au champ introduit a la
Nième position dans définition de la structure.

19/04/2021 45
IV.4 Initialisation des champs
 En C, il est possible de réaliser les
trois opérations ( définition, struct point{
int x;
déclaration, et initiation) d’une int y;
structure en utilisant une seule } p1={3,7};
instruction:
1) Définition du nouveau type
« struct point »
2) Déclaration d’un variable p1
de type « struct point »
3) Initiation du champs « x » à
« 3 » et du champ « y » à 7

19/04/2021 46
IV.5 Accès aux champs
 Pour faire référence à un membre particulier, on sépare le
nom de la structure concernée de celui du membre visé,
avec l ’opérateur (.)
 Nom_de_variable_structure.champ
 Le point (.) permet de connecter le champ (variable membre) à la
structure dont il fait partie.
 Exemple: Modifier les valeurs des champs de pt1:
pt1.x = -2;
pt1.y = 0;
pt2.x = pt1.y;
pt2.y = 2*pt1.x;

19/04/2021 47
IV.5 Accès aux champs

 Exemple:
#include <stdio.h>
#include <stdlib.h>

struct point{
int x;
int y;
};
int main(int argc, char *argv[]) {

struct point pt1 = {20,30};


printf("valeurs avant modification %d %d \n",pt1.x, pt1.y);
pt1.x = -2; pt1.y = 0;
printf(" valeurs apres modification : %d %d \n",pt1.x, pt1.y);
return 0;
}

19/04/2021 48
IV.5 Accès aux champs
 Le principal avantage des structures sur les variables est la
possibilité de copier des informations entre structures de
même type par une seule instruction simple.
 Dans le cas de notre exemple précédent, si on déclare deux
variables pt1 et pt2 de type « struct point », l’instruction :
 pt2=pt1;
 est équivalente aux deux instructions suivantes :
 pt2.x = pt1.x;

 pt2.y = pt1.y;

19/04/2021 49
IV.5 Accès aux champs
Question: Quelle est l'adresse du variable de type structure
« pt1 » ?
struct point pt1;
printf(" Adresse du champ x est: %x \n",&(pt1.x));
printf(" Adresse du champ y est: %x \n",&(pt1.y));
printf(" Adresse de la structure pt1 x est: %x \n",&(pt1));

Réponse: l'adresse du premier champ de la structure


19/04/2021 50
Fin de la séance

19/04/2021 51

Vous aimerez peut-être aussi