Vous êtes sur la page 1sur 16

Structures de donnes Introduction

Thorie et pratique de la programmation Pascal Fua

Structures de donnes
Le terme structure de donnes (data structure) dcrit la fois : 1. un moyen pour organiser les donnes en mmoire, et 2. des algorithmes pour manipuler ces donnes (accs, ajout, suppression, etc.). Exemples:

tableaux listes ensembles tables associatives

Pourquoi tudier ce sujet ?


Il est intressant dtudier les structures de donnes car :

leur utilisation judicieuse est la base de tout programme non-trivial, on retrouve le mme genre de structures de donnes dans tous les langages, les algorithmes permettant leur mise en uvre sont intressants.

Choix d'une structure


Le choix du type de structure de donnes utiliser dans un cas particulier tableau, liste, ou autre dpend principalement de

lefcacit des oprations frquemment utilises; de la facilit de les mettre en oeuvre.


Si on ne se souciait pas de lefcacit, il serait possible dutiliser un seul type de structures de donnes, par ex. les listes, dans tous les cas !

Interaction avec la gnricit

Les structures de donnes et la gnricit sont intimement lies : lorsquon dnit une structure de donnes, on veut faire abstraction du type exact des donnes stockes. Pour ce faire, on utilise naturellement la gnricit. Exemple : Le type des listes est List<E> o E reprsente le type des lments de la liste.

Tableaux en Java

Tableaux
Les tableaux sont la seule structure de donnes intgre au langage Java lui-mme. Point fort:

l'accs et la modication dun lment quelconque se fait


en O(1).

Points faibles:

les programmes doivent grer explicitement les indices. la taille est xe dnitivement au moment de la cration. linteraction avec la gnricit nest pas naturelle.
7

Intersection & Union


public class TestArray { ! public static void Print(Double[] A){ ! ! for (int i=0;i<A.length;i++) ! ! ! System.out.print(A[i]+" "); ! ! System.out.println("\n"); ! } ! public static Double[] Intersect(Double[] A1,Double[] A2){ ! ! ..... ! } public static Double[] Union(Double[] A1,Double[] A2){ ..... } public static void main (String[] args) { ! ! ! ! Double A1[]={1.0,2.0,3.0,5.0}; ! ! Double A2[]={1.0,3.0,4.0,6.0}; ! ! Double A3[]; ! ! ! ! Print(A1); ! ! Print(A2); ! ! A3=Intersect(A1,A2); ! ! Print(A3); ! ! A3=Union(A1,A2); ! ! Print(A3); ! } 8 }

Output: 1.0 3.0 5.0 6.0 2.0 3.0 4.0 5.0 3.0 5.0 1.0 3.0 5.0 6.0 2.0 4.0

Intersection
! ! ! ! ! ! public static Boolean Member(Double x,Double[] A){ ! for(int i=0;i<A.length;i++){ ! ! if(x.equals(A[i])) ! ! ! return(true); ! } ! return(false); } public static Double[] Intersect(Double[] A1,Double[] A2){ ! int i,n=0; ! Double[] Aux=new Double[A1.length]; ! for(i=0;i<A1.length;i++){ ! ! Double x=A1[i]; ! ! if(Member(x,A2)){ ! ! ! Aux[n]=x; ! ! ! n++; ! ! } ! }! ! ! ! Double A3[]=new Double[n]; ! for(i=0;i<n;i++) ! ! A3[i]=Aux[i]; ! return(A3); } 9

! ! ! ! ! ! ! ! ! ! ! ! ! !

Union
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! public static Double[] Union(Double[] A1,Double[] A2){ ! int i,n=0; ! Double[] Aux=new Double[A1.length]; ! for(i=0;i<A1.length;i++){ ! ! Double x=A1[i]; ! ! if(!Member(x,A2)){ ! ! ! Aux[n]=x; ! ! ! n++; ! ! } ! }! ! ! ! Double A3[]=new Double[n+A2.length]; ! for(i=0;i<n;i++) ! ! A3[i]=Aux[i]; ! for(i=0;i<A2.length;i++) ! ! A3[i+n]=A2[i]; ! return(A3); }

10

Intersection & Union


Utiliser des tableaux standards conduit crire un code

relativement compliqu pour une opration trs simple, qui nest pas dune lecture particulirement facile.
--> Lutilisation de structures appropries va nous permettre dy remdier.

11

Structures de donnes dans l'API Java

Le Java collections framework


Toutes les structures de donnes que nous allons examiner existent dans la bibliothque standard Java, regroupes dans le paquetage java.util. Elles constituent ce qu'on appelle le !collections framework!. La plupart des langages modernes fournissent le mme genre de structures de donnes dans leur bibliothque standard. Aprs avoir examin la mise en uvre dune structure de donnes, nous tudierons toujours rapidement la version disponible dans la bibliothque Java.

13

Organisation de java.util
Le paquetage java.util dnit trois familles de structures de donnes : les listes, les ensembles, et les tables associatives. A chaque genre de structure de donnes correspond une interface. Chaque interface est implmente par une ou plusieurs classes, qui mettent en uvre la structure de donnes dune certaine manire. Par exemple, l'interface gnrique List<E> reprsente le concept de liste. Les oprations dclares dans cette interface permettent de manipuler les lments de la liste. Deux classes implmentent cette interface :

ArrayList, les lments sont stocks dans un tableau; LinkedList, les lments sont chans.
14

Hirarchie de java.util
liste Collection List Set ensemble Map table associative

LinkedHashSet

15

LinkedHashMap

LinkedList

ArrayList

TreeSet

HashSet

TreeMap

HashMap

Classes historiques
Pour des raisons historiques, certaines structures de donnes existent deux exemplaires. Par exemple, les classes Vector et ArrayList reprsentent la mme structure de donnes. Vector date de Java 1.0, ArrayList de Java 1.2. Le mme genre de situation existe avec les classes Hashtable (ancienne version) et HashMap (nouvelle version). De manire gnrale, nous n'examinerons que les versions rcentes, en ignorant totalement les versions historiques.

16

Vous aimerez peut-être aussi