Académique Documents
Professionnel Documents
Culture Documents
Tpp10 Data Structures
Tpp10 Data Structures
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:
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.
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:
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
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
relativement compliqu pour une opration trs simple, qui nest pas dune lecture particulirement facile.
--> Lutilisation de structures appropries va nous permettre dy remdier.
11
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