Click here to load reader

Algorithme et structure de données IUP1 Miage. Structure de donnée composée Une entité qui possède plusieurs attribut (ou champs) Exemple : Un individu

  • View
    105

  • Download
    0

Embed Size (px)

Text of Algorithme et structure de données IUP1 Miage. Structure de donnée composée Une...

  • Page 1
  • Algorithme et structure de donnes IUP1 Miage
  • Page 2
  • Structure de donne compose Une entit qui possde plusieurs attribut (ou champs) Exemple : Un individu un nom, un prnom et un numro Une voiture une marque, une puissance, une valeur,
  • Page 3
  • Les Fractions Une fraction a un numrateur et un dnominateur ; les attributs sont de type entier class Fraction { public int numerateur ; public int denominateur ; }
  • Page 4
  • Comment accder aux attributs ? class Fraction { public int numerateur; public int denominateur; } public class Test { main(){ Fraction f = new Fraction(); f.numerateur=13; f.denominateur=21; S.o.p(f.numerateur/f.denominateur); }
  • Page 5
  • La classe Fraction les attributs sont de type entier, leur valeur initiale est un nombre entier alatoire (non nul pour le dnominateur !) class Fraction { private final int Max=100; public int numerateur=(int) (Math.random()*Max); public int denominateur=(int) (Math.random()*(Max-1))+1; }
  • Page 6
  • La classe Fraction Une fraction est capable de rpondre au message toString() qui retourne une description de la fraction sous la forme dune String "numerateur/denominateur=valeur " public String toString(){ return numerateur+"/"+denominateur+"="+numerateur /(double)denominateur; }
  • Page 7
  • Comment ce servir da la classe Fraction ? public class Test { main(){ Fraction f = new Fraction(); S.o.p(f); } > java Test 13/26=0.5
  • Page 8
  • Comment ce servir da la classe Fraction ? public class Test { main(){ Fraction f = new Fraction();S.o.p(f); f.numerateur = 6 ; f.denominateur = 2 ; S.o.p(f); } > java Test 71/22=3.227272727272727 6/2=3.0
  • Page 9
  • Un tableau de Fractions main(){ Fraction[] tab=new Fraction[4] ; for(int i=0;i< tab.length;i++){ tab[i]=new Fraction(); S.o.p(tab[i]); } }
  • Page 10
  • Structure de Liste chane Un lment dune liste possde un attribut valeur (de type entier) et un attribut suivant de type lment Cest bien une dfinition rcursive ! Avantage : le nombre dlments est variable et les lments sont crs (ou supprims) la demande pendant lexcution
  • Page 11
  • lment dune liste chane class Element { public int valeur ; public Element suivant ; }
  • Page 12
  • Structure de Liste chane Une liste possde un seul attribut tete de type Element qui reprsente le premier lment de la liste Une Liste est initialement vide (la valeur de lattribut tete est null) class Liste { public Element tete = null ; }
  • Page 13
  • Quatre listes chanes
  • Page 14
  • Construire une liste vide class Test { main(){ Liste l = new Liste() ; S.o.p(l); } } > java Test [ ]
  • Page 15
  • Ajouter un nouvel lment en tte de la liste main(){ Liste l= new Liste(); S.o.p(l); Element e=new Element(); e.valeur=99;e.suivant=null ; l.tete=e; S.o.p(l); } > java Test [ ] [ 99 ]
  • Page 16
  • Ajouter un nouvel lment en tte de la liste main(){ Liste l= new Liste(); S.o.p(l); Element e1 = new Element(); e1.valeur=99;e1.suivant=null ; l.tete=e1;S.o.p(l); Element e2 = new Element(); e2.valeur=100;e2.suivant=l.tete ; l.tete=e2;S.o.p(l); } > java Test [ ] [ 99 ] [ 100 99 ]
  • Page 17
  • Ajouter un nouvel lment en tte de la liste main(){ Liste l= new Liste(); S.o.p(l); Element e1 = new Element(); e1.valeur=99;e1.suivant=null ; l.tete=e1;S.o.p(l); Element e2 = new Element(); e2.valeur=100;e2.suivant=l.tete ; l.tete=e2;S.o.p(l); Element e3 = new Element(); e3.valeur=101;e3.suivant=l.tete ; l.tete=e3;S.o.p(l); } > java Test [ ] [ 99 ] [ 100 99 ] [ 101 100 99 ]
  • Page 18
  • Ajouter un nouvel lment en tte de la liste main(){ Liste l= new Liste(); S.o.p(l); //l.tete=null Element e1 = new Element(); e1.valeur=99;e1.suivant=l.tete ; l.tete=e1;S.o.p(l); Element e2 = new Element(); e2.valeur=100;e2.suivant=l.tete ; l.tete=e2;S.o.p(l); } > java Test [ ] [ 99 ] [ 100 99 ]
  • Page 19
  • void ajouterEnTete(Element e) Mthode qui ajoute un nouvel lment en tte de la liste (celle qui reoit le message) class Liste { public Element tete = null ; void ajouterEnTete(Element e){ e.suivant=this.tete ; this.tete=e; } }
  • Page 20
  • Crer une liste de 10 lments class Element { public int valeur = (int) (Math.random()*100); public Element suivant ; } class Test { main() { Liste l= new Liste() ; S.o.p(l); for(int i=0; i java Test [ ] [ 65 32 66 33 55 51 12 36 11 83 ]
  • Page 21
  • String toString() Mthode qui retourne une description de la liste (celle qui reoit le message) sous la forme dune String "[valeurDeTete..valeurDeQueue]" class Test { main() { Liste l = new Liste() ; for(int i=0;i java test 20 in [ 16 20 84 5 97 24 26 18 58 84 ] is true">
  • Recherche dans une liste class Test { main() { Liste l= new Liste() ; for(int i=0;i java Test 20 in [ 49 34 3 49 56 37 73 67 82 99 ] is false > java test 20 in [ 16 20 84 5 97 24 26 18 58 84 ] is true
  • Page 24
  • Recherche dans une liste boolean estDans(int x) { Element p=tete; while (p != null && p.valeur != x) p = p.suivant; return !(p == null) ; }
  • Page 25
  • Retirer le premier lment class Test { main(){ Liste l= new Liste() ; for(int i=0;i java Test [ 33 74 44 73 20 29 47 51 11 36 ] [ 74 44 73 20 29 47 51 11 36 ]
  • Page 26
  • Retirer le premier lment void retirerEnTete(){ if (! listeVide()) tete=tete.suivant; }
  • Page 27
  • Suppression de la premire occurrence class Test { main(){ Liste l= new Liste() ; for(int i=0;i java Test [ 48 71 76 3 13 72 85 0 56 90 ] > java Test [ 37 7 20 26 6 5 57 80 0 87 ] [ 37 7 26 6 5 57 80 0 87 ]
  • Page 28
  • Suppression de la premire occurrence de v void supprimer(int v){ Element p=tete; if (tete != null){ if (tete.valeur==v) { retirerEnTete();} else { while (p.suiv!=null && p.suiv.valeur!=v) p=p.suiv; if (p.suiv!=null) p.suiv=p.suiv.suiv; } } }
  • Page 29
  • Suppression de la premire occurrence P P
  • Page 30
  • Retirer le dernier lment class Test { main(){ Liste l= new Liste() ; for(int i=0;i java Test [ 33 74 44 73 20 29 47 51 11 36 ] [ 33 74 44 73 20 29 47 51 11 ]
  • Page 31
  • Retirer le dernier lment void retirerEnQueue(){ if (! listeVide()) if (tete.suivant==null) // un seul element tete=null; else{ // au moins deux elements Element p=tete; while (p.suivant.suivant!=null) p=p.suivant; p.suivant=null; } }
  • Page 32
  • Ajouter en queue class Test { main(){ Liste l= new Liste() ; for(int i=0;i java Test [ 96 21 38 79 99 6 67 4 78 45 ] [ 96 21 38 79 99 6 67 4 78 45 33 ]
  • Page 33
  • Ajouter en queue void ajouterEnQueue(Element e){ Element p=tete; if (listeVide()) { e.suivant=this.tete ; this.tete=e; } else { // au moins un element while (p.suivant!=null) p=p.suivant; p.suivant=e; e.suivant=null; } }
  • Page 34
  • Insertion d'un lment dans la liste en maintenant l'ordre croissant class Test { main(){ Liste l= new Liste() ; for(int i=0;i java Test [ 0 20 38 39 41 58 63 79 92 92 ] > java Test [ 3 14 33 36 46 52 62 70 71 73 ]
  • Page 35
  • Insertion d'un lment dans la liste en maintenant l'ordre croissant void inserer(Element nouveau) { int v= nouveau.valeur ; if (tete == null || tete.valeur > v) { nouveau.suivant = tete ; tete = nouveau; } else { // On recherche la position ou insrer la valeur Element precurseur = tete; Element curseur = tete.suivant; while(curseur != null && curseur.valeur < v) { precurseur = curseur ; curseur = curseur.suivant; } precurseur.suivant = nouveau ; nouveau.suivant = curseur; } }
  • Page 36
  • La classe Personne Une personne possde : un attribut numero (de type int ) un attribut nom (de type String ) un attribut suivant (de type Personne )
  • Page 37
  • La classe Personne class Personne { public int numero ; public String nom ; public Personne suivant ; public String toString(){ return "("+numero+","+nom+")"; } }
  • Page 38
  • La classe ListeDePersonnes class ListeDePersonnes { public Personne tete = null ; public String toString(){ String s="[ "; for(Personne p=tete;p!=null;p=p.suivant) s+=p.toString()+" "; return s+="]"; } }
  • Page 39
  • Liste de Personnes trie sur le numro On suppose que la liste est trie par ordre croissant des numros de personne void inserer(Personne p) Mthode qui ajoute un nouvel lment p dans la liste (celle qui reoit ce message) en conservant lordre des numros
  • Page 40 java Test [ (17,tutu) (22,toto) (39,titi) (45,tete) (95,tata) ]">
  • Liste de Personnes trie sur le numro class Test { main(){ ListeDePersonnes l = new ListeDePersonnes(); Personne p ; for(int i=0; i java Test [ (17,tutu) (22,toto) (39,titi) (45,tete) (95,tata) ]
  • Page 41
  • void inserer(Personne nouveau) void inserer(Personne nouveau) { int v= nouveau.numero ; // On teste si la liste est vide if (tete == null || tete.numero > v) { nouveau.suivant = tete ; tete = nouveau; } else { // On recherche la position ou insrer la valeur Personne precurseur = tete; Personne curseur = tete.suivant; while(curseur != null && curseur.numero < v) { precurseur = curseur; curseur = curs

Search related