Académique Documents
Professionnel Documents
Culture Documents
Département d’Informatique
Faculté des Sciences, Université Ibn Zohr
Agadir
melansari@gmail.com
Filière: SMI4-SM4
Module: Structures de données
https://sites.google.com/site/fsagadirsmi4/
Introduction
Une structure est une collection d’une ou plusiseurs variables,
généralement, ayant des types différents.
Les variables d’une structure sont groupées sous un seul nom.
Les structures permettent d’organiser les données compliquées. Les
variables liées sont groupés en seule entité au lieu des entités séparées.
Exemple-1, un employé peut être décrit par:
Nom,
Prénom.
SOM.
Salaire.
Adresse.
....
Le nom 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.
Pr. Mohamed EL ANSARI (FS-Agadir) Les structures en C 2 / 36
Définition d’une structure
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 strucure
décrivant un point est déclarée en C par:
struct point{
int x;
int y;
};
Définitions
Les variables nommées dans la structure sont appelées les membres
ou champs de la structure.
La déclaration d’une structure définit un nouveau type.
struct point{
int x;
int y;
};
struct point contitue le nouveau type.
Exemples de nouveaux types:
struct date{
struct complex{
int jour;
int real;
int mois;
int imaginary;
int annee;
};
};
Pr. Mohamed EL ANSARI (FS-Agadir) Les structures en C 5 / 36
Définition d’une structure
Déclarations
Définition de la structure struct point (le nouveau type):
/*
struct point{
int x;
int y;
};
/* Programme principal */
int main(int argc, char *argv[])
{
struct point p;
struct point q, r;
struct point t[20];
return 0;
}
Différentes initialisations
#include<stdio.h>
struct point{
int x;
int y;
};
Sortie du programme
int main(int argc, char* argv[]) a = (2,3)
{ b = (2,0)
struct point a = {2,3}, b = {2}; c = (0,0)
struct point c = {}, d ; d = (134513833,8601588)
printf("a = (%d,%d)\n", a.x, a.y);
printf("b = (%d,%d)\n", b.x, b.y);
printf("c = (%d,%d)\n", c.x, c.y);
printf("d = (%d,%d)\n", d.x, d.y);
return 0;
}
Pr. Mohamed EL ANSARI (FS-Agadir) Les structures en C 12 / 36
Initialisation, accès aux membres
Structures imbriquées
Structures imbriquées
Structures imbriquées
#include<stdio.h>
#define MAX 12
struct vect{
int taille;
float array[MAX];
};
Structures imbriquées
#define MAX 20
struct id {
char firstname[MAX];
char lastname[MAX];
};
struct people { Pas d’ambigüité dans la
struct id id; ligne struct id id; de
la structure people:
int age;
id est une variable
};
membre
int main(int argc,char* argv[]){ le type de id est
struct people p; struct id
strcpy(p.id.firstname,"xxxx");
strcpy(p.id.lastname,"yyyy");
p.age=943;
return 0;
}
Pr. Mohamed EL ANSARI (FS-Agadir) Les structures en C 17 / 36
Structures imbriquées
Les chams sont organisés dans l’ordre de leurs déclarations dans la structure.
struct foo{
int a;
char b; Sortie
float c; 0xbfc98bb4
}; 0xbfc98bb8
int main(int argc,char* argv[]){ 0xbfc98bbc
struct foo f; 0xbfc98bb4
printf("%p\n",&(f.a));
printf("%p\n",&(f.b));
printf("%p\n",&(f.c)); L’adresse d’une structure
printf("%p\n",&f); = l’adresse de son premier
return 0; champ.
}
struct liste{
int valeur;
struct liste suivant;
};
struct liste{
int valeur;
struct liste * suivant;
};
Pr. Mohamed EL ANSARI (FS-Agadir) Les structures en C 22 / 36
Structures et fonctions
Structures et fonctions
Structures et tableaux
Tableau de structures
struct key{
char *word;
int count;
} keytab[ ] = {
"auto",2,
"break",7,
"case",3 };
La structure point:
typedef struct point POINT;
...
POINT p1,p2; /* declaration de deux points */
POINT p3[10]; /* tableau de 10 points */
POINT *p4; /* pointeur sur un point */
p4 = malloc(10*sizeof(POINT)); /* allocation de l’espace
memoire pour 10 points */
struct point{
int x; Définition de la structure
int y; struct point .
}; typedef fait appel à
typedef struct point point; struct point pour créer le
nouveau type point.
main(){ Pas d’ambiguı̈té: le nouveau
point p, q = {3,-6}; type point peut prendre le
point * r; même nom que celui de la
point s[20]; structure (struct point).
}
typedef struct{
int x;
int y;
} point; Aucun nom n’a été attribué à la
structure.
main(){ Le type struct point n’existe
point p, q = {3,-6}; pas.
point * r;
point s[20];
}
Exercice applicatif
Bibliographie