Documente Academic
Documente Profesional
Documente Cultură
1 Allocation dynamique
Structures de donnes
STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
ALLOCATION DYNAMIQUE
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Plan de la leon
Modes dallocation Allocation mmoire Structures pointes
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Modes dallocation
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Modes dallocation
Mode Automatique
Allocation au moment de l'activation de la fonction et libration la fin
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Modes dallocation
Mode Contrl
Le programmeur spcifie quand une variable doit tre alloue et quand elle peut tre libre
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Allocation mmoire
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Allocation mmoire
Fonctions dallocation mmoire
zone de taille sz octets
Structures de donnes
Allocation mmoire
Libration explicite free(p);
Rend au systme la zone pointe par p
La valeur de p reste intacte (passage par valeur) Pas de fonction qui effectue des free () automatiquementGC
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Allocation mmoire
Tableaux dynamiques
Moyenne des notes
double moyenne(double t[], int n){ int i; double s=0; for(i=0; i<n; i++) s += t[i]; return s/n; }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Allocation mmoire
Tableaux dynamiques
#define Calloc(n,type) \ (type *)calloc(n,sizeof(type))
Structures de donnes
Allocation mmoire
Tableaux dynamiques
if( notes != NULL) { for(i=0; i<n; i++) { printf(" \nnote %d ? ",i); scanf("%d ", ¬es[i]); } printf("\nMoy=%f",moyenne(notes,n); }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Allocation programme
#include<stdlib.h> typedef struct { int code; char designation[20]; float prix; int quantite; } article; article *p; p NULL
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Allocation programme
article *p; p = (article *) malloc(sizeof(article)); if(p == NULL){ perror("Erreur d'allocation\n"); }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Allocation programme
article p DF:07
HEAP
DF:07
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Une structure pointe par p peut tre rfrence par: *p
xx
p
Prof. A. EL FAKER
HEAP
Structures de donnes
Structures pointes
Une structure pointe par p peut tre rfrence par: *p article *p; p = (article *) malloc(sizeof(article)); *p . code = 21364 p -> code = 21364
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Une structure pointe par p peut tre rfrence par: *p article *p; p = (article *) malloc(sizeof(article));
strcpy(p ->designation,"Tl");
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Une structure pointe par p peut tre rfrence par: *p #include<stddef.h> #define Malloc(T) (T*)malloc(sizeof(T));
article *p;
p = Malloc(article);
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Exemple
Structures de donnes
Structures pointes
Exercice
Construire la structure suivante cl p1 p2 p
"K03"
32 64
q2
q1
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Dclarations
typedef struct{ char cle[4]; int *p1, *p2; } noeud; noeud *p; int *q1, *q2; cl p1 p2 "K03" 32 p
q2
q1
64
Prof. A. EL FAKER
Structures de donnes
Structures pointes
Dclarations
p = Malloc(noeud); q1= Malloc(int); q2 = Malloc(int); strcpy(p->cle , "K03"); *q1 = 64; *q2 = 32; p->p1 = q1; p->p2 = q2;
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Elments du mme type
prem Aziz Imane
Med
typedef struct _pers { char nom [20]; struct _pers * suivant; } person;
Structures de donnes
Structures pointes
person * premier, aCell; //une cellule strcpy(aCell . Nom , "Ali") ; premier = & aCell; premier -> suivant = NULL;
Ali aCell
premier
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
p=premier; while (p) { printf ("%s\n", p->nom); p = p -> suivant; }
p
premier
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Ali
imane
Med
Structures de donnes
Structures pointes
p=premier; while (p) { printf ("%s\n", p->nom); p = p -> suivant; }
p
premier
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Ali
Imane
Med
Structures de donnes
Structures pointes
p=premier; while (p) { printf ("%s\n", p->nom); p = p -> suivant; }
p
tete
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Ali
Imane
Med
Structures de donnes
Structures pointes
Dfinir une rcursivit croise
?
Prof. A. EL FAKER
Structures de donnes
Structures pointes
Dfinir une rcursivit croise
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Structures pointes
Dfinir une rcursivit croise
?
Prof. A. EL FAKER
?
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI