chap9_structure des données
chap9_structure des données
chap9_structure des données
1
LES ENREGISTREMENTS:
STRUCT
2
Définition de (struct)
struct nom_enreg
{ type champs1;
type champs2;
type champs3;
};
Exemple
struct personne
{ char nom[30];
char prenom [20];
int age;
};
Instanciation de struct
struct nom_enreg vble1, vble2, …, vblen;
Exemple:
struct personne pers1, pers2;
Exemple:
struct personne pers1, pers2;
pers1.prenom=“Salah”;
pers1.age = 20;
printf(“l’age de M.%s est:%d”, pers1.prenom,pers1.age);
Initialisation des (struct)
Il est possible d’initialiser un enregistrement lors de sa
déclaration
struct nom_enreg {val1, val2, …, valn};
Exemple:
struct pers1 = {“salah”, “ali”, 15}
/* prototype de fonction*/
void fct(struct point y);
Exemple:
int main()
{ struct p1;
p1.absc = 5; p1.ord = 3;
printf(“valeurs avant appel : %d %d”,
p1.absc, p1.ord);
fct (p1);
printf(“valeurs après appel : %d %d”,
p1.absc, p1.ord);
return 0;
}
void fct (struct point s)
{s.absc = 0; s.ord = 0;}
11
Passer une structure par adresse
12
Précautions de passages en paramètres
13
Exemple:
int main()
{ struct p1;
p1.absc = 5; p1.ord = 3;
printf(“valeurs avant appel : %d %d”,
p1.absc, p1.ord);
fct (&p1);
printf(“valeurs après appel : %d %d”,
p1.absc, p1.ord);
return 0;
}
void fct (struct point * s)
{s->absc = 0; s->ord = 0;}
16
Les unions
17
Taille de l’union
18
Utilité
19
Unions et Champs binaires
• Un champ binaire peut être utilisé pour indiquer quelle
information considérer dans l’union;
• Ce champ est défini en tant que structure;
struct flag
{ type nom1 : longueur1
…
type nomn : longueurn
} ;
20
Unions complexes
21
LES ÉNUMÉRATIONS:
ENUM
22
Définition
23
Déclaration
Syntaxe:
enum tag {liste_enumeree} liste_variables;
tag: le nom de l’énumération
Liste_variables: liste des variables de type tag
Liste_enumeres: liste de noms énumérées représentant
des constantes entières.
Exemple:
• enum automobile {4chv, 5chv, 6chv};
Il es possible de définir des variables de type enum ainsi:
• enum automobile japonaise, américaine;
• Équivaut aussi à:
• enum automobile {4chv, 5chv, 6chv} japonaise, américaine;
24
Affecter des valeurs aux noms énumérés
Les éléments des listes énumérées sont incrémentés de 0
à n. Exemple:
o enum automobile {4chv, 5chv, 6chv} japonaise, américaine;
o 4chv = 0, 5chv= 1 et 6chv=1
Il est possible d’affecter d’autres valeurs entières:
o enum automobile {4chv=60, 5chv=30, 6chv=10};
o 4chv représente le nombre 60
o 5chv représente le nombre 30
o 6chv représente le nombre 10
o enum automobile {4chv=60, 5chv=30, 6chv};
o 4chv représente le nombre 60
o 5chv représente le nombre 30
o 6chv représente le nombre 31 31= 30 + 1
25
Exemple
26
Exemple: conversion minuscule majuscule
27
Exemple: conversion minuscule majuscule
28
Exemple: conversion minuscule majuscule
POETE 1
POETE 2
POETE 3
29
TYPEDEF
30
TYPEDEF
31
TYPEDEF
32
LAB_CHAP9
33
Exercice 1
34
Exercice 2
Ecrire un programme qui permet à un utilisateur de
fournir des informations personnelles (nom, âge) ainsi
que des informations sur son téléopérateur (une société
de diffusion par câble ou bien une société de diffusion
par satellite), le nom de la société et le nombre d’heures
consacrées à la télé (par semaine).
Modifiez le programme en ajoutant un champ binaire
concernant le type de connexion
35
LISTES CHAÎNÉES
36
Principe
Pour stocker des éléments de même type, on a
recours aux structures :
Tableaux ou,
Listes chaînées
Pointeur de tête
Pointeur de tête
Pointeur de tête
44
Création & Initialisation
Exemple
struct person
{ char nom[20];
struct person * suiv;
};
int main()
{ struct person * tete;
/* initialisation d’une liste vide */
tete = NULL;
return 0;
}
Illustration
Pointeur de tête
NULL
45
Insertion au début
Étapes :
1. Création d’une structure en réservant l’espace
mémoire nécessaire avec malloc
2. Mise à jour de la valeur de la zone d’adressage
et la zone de données du nouvel élément
3. Modification du pointeur de tête avec l’adresse
du nouvel élément
NULL
Nv_Don info1 info2 info3
suiv suiv suiv suiv
Après Insertion
NULL
Nv_Don info1 info2 info3
suiv suiv suiv suiv
Insertion en queue
Étapes :
1. Création d’une structure en réservant
l’espace mémoire nécessaire avec malloc
2. Mise à jour de la valeur de la zone d’adressage
du dernier élément pour qu’il pointe vers le
nouvel élément
3. Mise à jour de la zone de données et la zone
d’adressage du nouvel élément
48
Insertion en queue
Exemple :
49
Insertion au milieu
Étapes :
1. Localisation l’élément de la liste après lequel
le nouveau maillon devra être inséré =>
élément de référence
2. Création d’une structure en réservant l’espace
mémoire nécessaire avec malloc
3. Mise à jour de la valeur de la zone
d’adressage de l’élément de référence
4. Mise à jour de la valeur de la zone
d’adressage du nouvel élément
50
Insertion au milieu
Exemple:
struct person * nouv;
struct person * ref;/*pointeur vers l’élément de référence*/
….
/* insérer ici le code nécessaire pour initialiser ref avec l’adresse de
l’élément référence*/
……
/*création du nouvel élément */
nouv = (person*) malloc (sizeof(struct person));
/* Mise à jour des pointeurs */
nouv->suiv = ref->suiv ;
ref->suiv = nouv
51
Suppression d’un élément
Procédure:
Trois cas se présentent selon la position de
l’élément à supprimer:
1. Si premier , modifier le pointeur tête vers le
deuxième élément
2. Si dernier, modifier la zone d’adressage de
l’avant dernier élément
3. Si intermédiaire, modifier la zone d’adressage
de l’élément qui le précède pour le faire pointer
vers l’élément qui le suit
54
Suppression d’un élément
Cas 3: Suppression d’un élément intermédiaire
55
LAB_CHAP9/LISTE_CHAINEE
56
Exercice 1