2
Tableaux
3
Liste chaˆın´ ee
4
Liste doublement chain´ ee
5
Liste chain´ ee de Tableau
6
Pile
7
File
8
File de Priorit´ e
sizeof()
op´ erateur donnant la taille en octets de son op´ erande
# inlude < s t d i o . h >
# inlude < s t d l i b . h >
s t r u c t m y _ s t r u c t { int a ;
s i z e _ t b ;};
int m a i n () { int a ; s i z e _ t s ;
s t r u c t m y _ s t r u c t ms ; p r i n t f (" s i z e o f ( a )=% lu \ n ",
s i z e o f( a ));
p r i n t f (" s i z e o f ( s )=% lu \ n ", s i z e o f( s ));
p r i n t f (" s i z e o f ( ms )=% lu \ n ", s i z e o f( ms ));
p r i n t f (" s i z e o f ( int )=% lu \ n ", s i z e o f(int));
p r i n t f (" s i z e o f ( s i z e _ t )=% lu \ n ", s i z e o f( s i z e _ t ));
p r i n t f (" s i z e o f ( s t r u c t my . . . ) = % lu \ n ", s i z e o f(s t r u c t m y _ s t r u c t ));
r e t u r n E X I T _ S U C C E S S ; }
R´esultats :
sizeof(a)=4 sizeof(s)=8 sizeof(ms)=16 sizeof(int)=4 sizeof(size t)=8
sizeof(struct my struct)=16
op´ erateur donnant la taille en octets de son op´ erande
# inlude < s t d i o . h >
# inlude < s t d l i b . h >
s t r u c t m y _ s t r u c t { int a ;
s i z e _ t b ;};
int m a i n () { int a ; s i z e _ t s ;
s t r u c t m y _ s t r u c t ms ; p r i n t f (" s i z e o f ( a )=% lu \ n ",
s i z e o f( a ));
p r i n t f (" s i z e o f ( s )=% lu \ n ", s i z e o f( s ));
p r i n t f (" s i z e o f ( ms )=% lu \ n ", s i z e o f( ms ));
p r i n t f (" s i z e o f ( int )=% lu \ n ", s i z e o f(int));
p r i n t f (" s i z e o f ( s i z e _ t )=% lu \ n ", s i z e o f( s i z e _ t ));
p r i n t f (" s i z e o f ( s t r u c t my . . . ) = % lu \ n ", s i z e o f(s t r u c t m y _ s t r u c t ));
r e t u r n E X I T _ S U C C E S S ; }
R´esultats : sizeof(a)=4 sizeof(s)=8 sizeof(ms)=16 sizeof(int)=4 sizeof(size t)=8
sizeof(struct my struct)=16
sizeof
op´ erateur donnant la taille en octets de son op´ erande
# inlude < s t d i o . h >
# inlude < s t d l i b . h >
int m a i n () { int a ; int * pa ; int tab [ 7 ] ; int * p t a b ; pa = & a ; p t a b = tab
p r i n t f (" s i z e o f ( a )=% lu \ n ", s i z e o f( a ));
p r i n t f (" s i z e o f ( pa )=% lu \ n ", s i z e o f( pa ));
p r i n t f (" s i z e o f ( tab )=% lu \ n ", s i z e o f( tab ));
p r i n t f (" s i z e o f ( p t a b )=% lu \ n ", s i z e o f( p t a b ));
r e t u r n E X I T _ S U C C E S S ; }
R´esultats :
sizeof(a)=4 sizeof(pa)=8 sizeof(tab)=28 sizeof(ptab)=8
op´ erateur donnant la taille en octets de son op´ erande
# inlude < s t d i o . h >
# inlude < s t d l i b . h >
int m a i n () { int a ; int * pa ; int tab [ 7 ] ; int * p t a b ; pa = & a ; p t a b = tab
p r i n t f (" s i z e o f ( a )=% lu \ n ", s i z e o f( a ));
p r i n t f (" s i z e o f ( pa )=% lu \ n ", s i z e o f( pa ));
p r i n t f (" s i z e o f ( tab )=% lu \ n ",
p r i n t f (" s i z e o f ( p t a b )=% lu \ n ", s i z e o f( p t a b ));
r e t u r n E X I T _ S U C C E S S ; }
R´esultats : sizeof(a)=4 sizeof(pa)=8 sizeof(tab)=28 sizeof(ptab)=8
malloc et free
Allocation de m´ emoire dynamique #include<stdlib.h>
malloc
fonction d’allocation de m´ emoire dynamique (allocation dans le segment m´ emoire du TAS)
void * m a l l o c ( s i z e _ t n u m b y t e s );
free
lib´ eration de la m´ emoire allou´ ee dynamiquement
int free ( void * r e g i o n );
malloc free
Allocation de m´ emoire dynamique #include<stdlib.h>
# inlude < s t d i o . h >
# inlude < s t d l i b . h >
int m a i n (){
int * pv ;
pv = ( int *) m a l l o c ( s i z e o f ( int ) );
if ( pv == N U L L )
r e t u r n E X I T _ F A I L U R E ; ...
f r e e ( pv )
r e t u r n E X I T _ S U C C E S S ;
}
Tableaux
D´ efinition
S´ equence de n El´ ´ ements
El´ ´ ements index´ es par un entier entre 0 et n − 1
Complexit´ e
Acc` es al´ eatoire :
O(1)
Insertion :
O(n)
Cout m´ emoire :
n × sizeof(´ El´ ement)
Impl´ ementation
java : java.util.ArrayList
C++ : std::vector
D´ efinition
S´ equence de n El´ ´ ements
El´ ´ ements index´ es par un entier entre 0 et n − 1
Complexit´ e
Acc` es al´ eatoire : O(1) Insertion : O(n)
Cout m´ emoire : n × sizeof(´ El´ ement)
Impl´ ementation
java : java.util.ArrayList
C++ : std::vector
Tableaux
En C
Cr´ eation :
# inlude < s t d i o . h >
# inlude < s t d l i b . h >
int m a i n (){
s i z e _ t s i z e = 2 0 0 ; // t a i l l e du t a b l e a u
d o u b l e * tab ; // p o i n t e u r sur la p r e m i e r e c a s e du t a b l e a u tab = (d o u b l e *) m a l l o c ( s i z e o f(d o u b l e) * s i z e );
if( tab == N U L L )
r e t u r n E X I T _ F A I L U R E ; ...
f r e e ( tab )
r e t u r n E X I T _ S U C C E S S ; }
En C
Lecture/´ Ecriture :
v o i d a r r a y S e t (int i , d o u b l e v , d o u b l e * tab , s i z e _ t s i z e ){
if( i < s i z e ) tab [ i ] = v ; }
d o u b l e a r r a y G e t (int i , d o u b l e * tab , s i z e _ t s i z e ){
if( i < s i z e ) r e t u r n tab [ i ];
r e t u r n 0;
}
Tableaux
En C
Insertion :
v o i d a r r a y P u s h B a c k (d o u b l e v , d o u b l e ** tab , s i z e _ t * s i z e ){
int i ;
// A l l o c a t i o n du n o u v e a u t a b l e a u d o u b l e * t e m p T a b =
(d o u b l e *) m a l l o c (s i z e o f(d o u b l e) * (* s i z e + 1 ) ) ; // R e c o p i e du t a b l e a u
for( i =0 ; i < * s i z e ; i ++) t e m p T a b [ i ] = (* tab )[ i ];
t e m p T a b [* s i z e ] = v ; // i n s e r t i o n f r e e (* tab ); // L i b e r a t i o n de l ’ a n c i e n // m i s e a j o u r des p o i n t e u r s
(* s i z e ) + + ;
* tab = t e m p T a b ; }
En C
Suppression :
v o i d a r r a y D e l e t e E l e m (int i , d o u b l e ** tab , s i z e _ t * s i z e ){
. . . . }
Liste chaˆın´ee
D´ efinition
S´ equence de n El´ ´ ements
´ El´ ements index´ es par un entier entre 0 et n − 1
´ El´ ements en-capsul´ es dans un Nœud
Complexit´ e
Acc` es al´ eatoire :
O(n)
Insertion :
O(1)
Cout m´ emoire :
n × (sizeof(´ El´ ement) + sizeof(Noeud))
Impl´ ementation
java : java.util.LinkedList
C++ : N/A
D´ efinition
S´ equence de n El´ ´ ements
´ El´ ements index´ es par un entier entre 0 et n − 1
´ El´ ements en-capsul´ es dans un Nœud
Complexit´ e
Acc` es al´ eatoire : O(n) Insertion : O(1)
Cout m´ emoire : n × (sizeof(´ El´ ement) + sizeof(Noeud))
Impl´ ementation
java : java.util.LinkedList
Liste chaˆın´ee
En C
Cr´ eation :
t y p e d e f s t r u c t {d o u b l e d a t a ; n o d e * n e x t ;} n o d e ; int m a i n (){
n o d e * h e a d ; // p o i n t e u r sur la t e t e h e a d = N U L L ; // I n i t i a l i s a t i o n de la t e t e // I n s e r t i o n d ’ un n o e u d en t e t e
n o d e * tmp = ( n o d e *) m a l l o c ( s i z e o f( n o d e ) );
l i n k e d L i s t I n s e r t B e f o r e (& head , tmp );
// I n s e r t i o n d ’ un n o e u d en q u e u e
tmp = ( n o d e *) m a l l o c ( s i z e o f( n o d e ) );
n o d e * q u e u e = l i n k e d L i s t G e t T a i l ( h e a d );
l i n k e d L i s t I n s e r t A f t e r ( queue , tmp );
l i n k e d L i s t F r e e ( h e a d );
r e t u r n E X I T _ S U C C E S S ; }
En C
Lecture/´ Ecriture :
n o d e * l i n k e d L i s t G e t N o d e (int i , n o d e * h e a d ){
. . . . }
n o d e * l i n k e d L i s t G e t T a i l ( n o d e * h e a d ){
. . . . . }
Liste chaˆın´ee
En C
Insertion :
v o i d l i n k e d L i s t I n s e r t B e f o r e ( n o d e ** t h i s N o d e , n o d e * n e w N o d e ){
. . . . . }
v o i d l i n k e d L i s t I n s e r t A f t e r ( n o d e * t h i s N o d e , n o d e * n e w N o d e ){
. . . . . }
Liste doublement chain´ee
D´ efinition
S´ equence de n El´ ´ ements
´ El´ ements index´ es par un entier entre 0 et n − 1
´ El´ ements en-capsul´ es dans un Nœud
Complexit´ e
Acc` es al´ eatoire : Insertion :
O(1)
Cout m´ emoire :
n × (sizeof(´ El´ ement) + sizeof(Noeud))
Impl´ ementation
java : java.util.deque
Liste doublement chain´ee
D´ efinition
S´ equence de n El´ ´ ements
´ El´ ements index´ es par un entier entre 0 et n − 1
´ El´ ements en-capsul´ es dans un Nœud
Complexit´ e
Acc` es al´ eatoire : O(n) Insertion : O(1)
Cout m´ emoire : n × (sizeof(´ El´ ement) + sizeof(Noeud))
Impl´ ementation
java : java.util.deque
C++ : std:deque
En C
Cr´ eation :
t y p e d e f s t r u c t {
d o u b l e d a t a ; // p o i n t e u r sur les d o n n e e s n o d e * n e x t ; // p o i n t e u r sur le n o e u d s u i v a n t n o d e * p r e v ; // p o i n t e u r sur le n o e u d p r e c e d a n t } n o d e ;
int m a i n (){
int s i z e = 1; // t a i l l e de la l i s t e c h a i n e e n o d e * h e a d ; // p o i n t e u r sur la t e t e
n o d e * t a i l ; // p o i n t e u r sur la q u e u e // P r e m i e r e e l e m e n t
h e a d = ( n o d e *) m a l l o c ( s i z e o f( n o d e ) );
t a i l = h e a d ; head - > n e x t = N U L L ; head - > p r e v = N U L L ; . . . .
Liste chain´ee de Tableau
D´ efinition
S´ equence de n El´ ´ ements r´ epartis dans k Tableaux
´ El´ ements index´ es par un entier entre 0 et n − 1 Tableaux d’´ el´ ements en-capsul´ es dans un Nœud
Complexit´ e
Acc` es al´ eatoire :
O(k)
Insertion :
O(n/k )
Cout m´ emoire :
n × sizeof(´ El´ ement) + k × sizeof(Noeud)
Impl´ ementation
java : java.util.deque
C++ : std:deque
D´ efinition
S´ equence de n El´ ´ ements r´ epartis dans k Tableaux
´ El´ ements index´ es par un entier entre 0 et n − 1 Tableaux d’´ el´ ements en-capsul´ es dans un Nœud
Complexit´ e
Acc` es al´ eatoire : O(k) Insertion : O(n/k)
Cout m´ emoire : n × sizeof(´ El´ ement) + k × sizeof(Noeud)
Impl´ ementation
java : java.util.deque
Liste chain´ee de Tableau
En C
Cr´ eation :
t y p e d e f s t r u c t {
d o u b l e * d a t a s ; // p o i n t e u r sur un t a b l e a u de d o n n e e s n o d e * n e x t ; // p o i n t e u r sur le n o e u d s u i v a n t
} n o d e ; int m a i n (){
int s i z e = 2 0 0 ; // n o m b r e d ’ e l e m e n t s int n b B l o c k = 10; // n o m b r e de b l o q u e n o d e * h e a d ; // p o i n t e u r sur la t e t e // P r e m i e r e e l e m e n t
h e a d = ( n o d e *) m a l l o c ( s i z e o f( n o d e ) );
head - > d a t a s = (d o u b l e *) m a l l o c ( s i z e o f(d o u b l e) * s i z e / n b B l o c k );
head - > n e x t = N U L L ; . . . .
r e t u r n E X I T _ S U C C E S S ; }
Pile
D´ efinition
Collection de n El´ ´ ements
Deux op´ erations (FILO) : Ajout et Retrait
Complexit´ e
Ajout : Retrait :
O(1)
Cout m´ emoire :
n × sizeof(´ El´ ement)
Impl´ ementation
java : N/A
C++ : std:stack
Pile
D´ efinition
Collection de n El´ ´ ements
Deux op´ erations (FILO) : Ajout et Retrait
Complexit´ e
Ajout : O(1) Retrait : O(1)
Cout m´ emoire : n × sizeof(´ El´ ement)
Impl´ ementation
java : N/A
C++ : std:stack
En C
Cr´ eation :
t y p e d e f s t r u c t {
int * d a t a ; // p o i n t e u r sur un t a b l e a u de d o n n e e s int s i z e ; // t a i l l e m a x i m u m de la p i l e
int top ; // n i v e a u de la p i l e } s t a c k ;
int m a i n (){
s t a c k m y S t a c k ; // I n i t i a l i s a t i o n m y S t a c k . s i z e = 2 0 0 ; m y S t a c k . top = 0;
m y S t a c k . d a t a = (int *) m a l l o c ( s i z e o f(int) * m y S t a c k . s i z e );
. . . .
r e t u r n E X I T _ S U C C E S S ; }
Pile
En C
Ajout et Retrait :
v o i d s t a c k P u s h ( s t a c k * pStack , int val ){
if( pStack - > top < pStack - > s i z e ){
pStack - > d a t a [ pStack - > top ] = val ; pStack - > top ++;
} }
int s t a c k P o p ( s t a c k * p S t a c k ){
int d a t a = 0;
if( pStack - > top > 0 ){
pStack - > top - -
d a t a = pStack - > d a t a [ pStack - > top ] }
r e t u r n d a t a ; }
File
D´ efinition
Collection de n El´ ´ ements
Deux op´ erations (FIFO) : Ajout et Retrait
Complexit´ e
Ajout : Retrait :
O(1)
Cout m´ emoire :
n × sizeof(´ El´ ement)
Impl´ ementation
java : N/A
C++ : std:queue
File
D´ efinition
Collection de n El´ ´ ements
Deux op´ erations (FIFO) : Ajout et Retrait
Complexit´ e
Ajout : O(1) Retrait : O(1)
Cout m´ emoire : n × sizeof(´ El´ ement)
Impl´ ementation
java : N/A
C++ : std:queue
En C
Cr´ eation :
t y p e d e f s t r u c t {
int * d a t a ; // p o i n t e u r sur un t a b l e a u de d o n n e e s int s i z e ; // t a i l l e m a x i m u m de la f i l e
int i t e m C o u n t ; // c o m p t e u r d ’ e l e m e n t s int f r o n t ; // a v e n t de la f i l e int r e a r ; // a r r i e r e de la f i l e } q u e u e ;
int m a i n (){
q u e u e m y Q u e u e ; // I n i t i a l i s a t i o n m y Q u e u e . s i z e = 2 0 0 ; m y Q u e u e . r e a r = 0;
m y Q u e u e . f r o n t = 0;
m y Q u e u e . i t e m C o u n t = 0;
m y Q u e u e . d a t a = (int *) m a l l o c ( s i z e o f(int) * m y Q u e u e . s i z e );
. . . .
File
En C
Ajout et Retrait :
v o i d q u e u e P u s h ( q u e u e * pQueue , int val ){
. . . . . }
int q u e u e P o p ( q u e u e * p Q u e u e ){
. . . . . }
File de Priorit´e
D´ efinition
Collection de n El´ ´ ements ordonn´ ees Utilis´ e pour ordonner des tˆ aches ` a ex´ ecuter Deux op´ erations :
I
Ajout
I
Retrait de l’´ el´ ement le plus grand
Complexit´ e
Ajout : Retrait :
O(1)
Cout m´ emoire :
n × sizeof(´ El´ ement)
Impl´ ementation
java : java.util.PriorityQueue
File de Priorit´e
D´ efinition
Collection de n El´ ´ ements ordonn´ ees Utilis´ e pour ordonner des tˆ aches ` a ex´ ecuter Deux op´ erations :
I
Ajout
I
Retrait de l’´ el´ ement le plus grand
Complexit´ e
Ajout : O(logn) Retrait : O(1)
Cout m´ emoire : n × sizeof(´ El´ ement)
Impl´ ementation
java : java.util.PriorityQueue
C++ : std:priority queue
File de Cache
D´ efinition
Collection de n El´ ´ ements unique Utilis´ e par les syst` emes de cache Deux op´ erations :
I
Ajout en queue si nouveau
I
Acc` es al´ eatoire + d´ eplac´ e en tˆ ete
Complexit´ e
Ajout : Acc` es :
O(logn)
Cout m´ emoire :
n × sizeof(´ El´ ement)
Impl´ ementation
java : N/A
File de Cache
D´ efinition
Collection de n El´ ´ ements unique Utilis´ e par les syst` emes de cache Deux op´ erations :
I
Ajout en queue si nouveau
I