Sunteți pe pagina 1din 33

n 11 Introduction et vue densemble Leon n.

1 Allocation dynamique

Structures de donnes

STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

ALLOCATION DYNAMIQUE

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Plan de la leon
Modes dallocation Allocation mmoire Structures pointes
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Modes dallocation

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Allocation mmoire

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Allocation mmoire
Fonctions dallocation mmoire
zone de taille sz octets

void * malloc(size_t sz);


zone de n objets chacun de taille sz

void * calloc(size_t n, size_t sz);


L'adresse de la zone alloue est automatiquement affecte un pointeur
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Allocation mmoire
Tableaux dynamiques
#define Calloc(n,type) \ (type *)calloc(n,sizeof(type))

int i,n; double *notes;


printf("#Notes ? "); scanf("%d ", &n); notes = Calloc(n, double);
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Allocation mmoire
Tableaux dynamiques
if( notes != NULL) { for(i=0; i<n; i++) { printf(" \nnote %d ? ",i); scanf("%d ", &notes[i]); } printf("\nMoy=%f",moyenne(notes,n); }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes
Allocation programme
article p DF:07

HEAP

DF:07
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes
Une structure pointe par p peut tre rfrence par: *p

xx
p
Prof. A. EL FAKER

HEAP

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes
Exemple

Tableaux dynamiques La taille nest pas encore connue lors de la compilation


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes
Elments du mme type
prem Aziz Imane

Med

typedef struct _pers { char nom [20]; struct _pers * suivant; } person;

Le compilateur connait la taille du pointeur


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

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

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes
Dfinir une rcursivit croise

struct s1 { struct s2* prec, suiv; };

?
Prof. A. EL FAKER

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes
Dfinir une rcursivit croise

struct s2 { char *str ; struct s1 * lien; };


"Dbut" "Fin"

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

Structures pointes
Dfinir une rcursivit croise

struct s2; //dclaration incomplte struct s1 { struct s2* prec, suiv; };

?
Prof. A. EL FAKER

?
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 11 Introduction et vue densemble Leon n. 1 Allocation dynamique

Structures de donnes

STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

S-ar putea să vă placă și