Vous êtes sur la page 1sur 10

04/03/2022

UNIVERSITE ABDELMALEK ESSAADI

Faculté des Sciences de Tétouan

Structures de données
SMI / SMA – S4

a.souri@uae.ac.ma
adnan.souri@gmail.com

Structures de données

 Jusqu’à maintenant nos programmes utilisent des variables simples


(entiers, réels, caractères, …)

 On utilise encore des variables un peu complexes (tableaux, chaines


de caractères)

 On vérifiait généralement les propriétés suivantes:


 tous les éléments ont le même type de base ;
 le nombre d’éléments stockés est fixé ;

 Et si l’on veut stocker des éléments de types différents qui font


référence à un même objet ? Structure
 Une structure va nous apporter la solution pour regrouper des
variables de types différents en une seule variable composée. 2

1
04/03/2022

Structures de données

 On détaillera ce cours comme suit :

 Chapitre 1 : Les structures


 Chapitre 2 : Les listes chaînées, les piles et les files
 Chapitre 3 : Les arbres
 Chapitre 4 : Les graphes

UNIVERSITE ABDELMALEK ESSAADI

Faculté des Sciences de Tétouan

CHAPITRE 1

Les Structures

a.souri@uae.ac.ma
adnan.souri@gmail.com

2
04/03/2022

Structures de données

• Equivalent de l’enregistrement en algorithmique

• Type structuré ou type hétérogène composé de plusieurs champs pouvant


avoir chacun son propre type.

• Syntaxe :

struct nom_type { Mais il n’y a pas encore de


type1 champ1 ;
type2 champ2 ;
variable de type structure !
type3 champ3 ;
… C’est juste une création du
} ; « modèle »
• Déclaration : struct nom_type objet;
• La taille réservée en mémoire est la somme des tailles des champs. 5

Structures de données

• Exemple de structure :
struct etudiant {
int CNE;
char nom[80],prenom[80];
};

• Exemple de déclaration de variables :


struct etudiant e,e1,e2 ;

• Initialisation à la déclaration :
struct etudiant e = {70081, "Alami", "Badr"};

• Accès à différents membres :


structure.champ
6

3
04/03/2022

Structures de données

• Accès aux champs : utilisation du symbole .

printf("%s %s a le numéro %d\n",e.prenom,e.nom,e.CNE);

e.CNE = 12121212 ;

• Affectation possible entre deux variables de même type :

struct etudiant e1 = {70081, "Alami", "Badr"};


struct etudiant e2 ;
e1 = e2 ;

• L’étudiant e2 aura les mêmes valeurs que l’étudiant e1

Structures de données

• Utilisation de typedef :
struct etudiant {

} ;
typedef struct etudiant Etd ;

typedef struct etudiant {



} Etd ;
typedef struct {

} Etd ;

• Déclaration : Etd e ; 8

4
04/03/2022

Structures de données

• Imbrication d’une structure dans une autre structure :

struct date {
int jour, mois, annee;
} ;

typedef struct date Date ;

struct etudiant {
int CNE ;
char nom[80], prenom[80];
Date d ;
// ou bien struct date d
} ;

typedef struct etudiant Etd ; 9

Structures de données

• On peut toujours initialiser à la déclaration :

Etd e = {70081,"Baroudi","Najma",{12, 06, 2000} };

• Pour l’accès aux champs, on utilise la double indirection :

printf("%s est née le %d / %d / %d\n", e.prenom,


e.d.jour, e.d.mois, e.d.annee) ;

Pour l’exemple le programme affiche:

Najma est née le 12/06/2000

10

5
04/03/2022

Structures et fonctions

• Une structure
– Peut être passée comme argument des fonctions
– Peut être résultat d’une fonction

– Exemple : fonction qui calcule s la somme de 2 complexes a et b


passés en paramètres

11

Structures et fonctions

12

6
04/03/2022

Structures et fonctions

13

Structures et tableaux

• Supposons que l’on ait déjà déclaré la structure struct etudiant


• On veut déclarer un tableau de 100 etudiants !
struct etudiant T[100] ;
• Pour accéder aux champs de la structure ?
T[i].note = 13 ;

0 1 99
CNE CNE CNE
T nom nom nom
prenom prenom … prenom
note note note
14

7
04/03/2022

Structures et pointeurs

• Un pointeur est une variable dont la valeur est égale à l’adresse d’un
autre objet.
• On déclare un pointeur p vers une structure de type struct modele :
struct modele *p ;
• Exemple
struct etudiant e; // e est une structure
struct etudiant *p; // p est un pointeur
p = &e;

15

Structures et pointeurs

typedef struct etudiant Etd ;


typedef Etd * P_etudiant; // pointeur
P_etudiant p1,p2; // au lieu de Etd *p1

• p1 et p2 sont des pointeurs vers des structures

16

8
04/03/2022

Structures et pointeurs

Etd e, *pe ;
pe = &e ;

 pe contiendra l’adresse du premier champ de la structure


• Utilisation du symbole pour accéder aux champs dans le cas des
pointeurs :
pe CNE = 12 ;

• Ou bien :
(*pe).CNE = 12 ;
e.CNE = 12 ;

17

Structures de données

• Utilisation d’un champ qui soit du même type que la structure :

struct etudiant {
int CNE ;
char nom [80], prenom [80] ;
struct etudiant binome ;
} ;

INCORRECT

La structure struct etudiant est en train d’être définie, le


compilateur ne connaît pas la taille mémoire à réserver pour le
champ binome
18

9
04/03/2022

Structures de données

• Utilisation d’un champ qui soit du même type que la structure :

• Utilisation de l’adresse :

struct etudiant {
int CNE ;
char nom [80], prenom [80] ;
struct etudiant *binome ;
} ;

• La variable binome est un pointeur vers une structure


« struct etudiant »
Listes chainées
19

10

Vous aimerez peut-être aussi