structures de donnÉes et algorithmes...représentées par un tableau chaînées intérêts réduit...
TRANSCRIPT
![Page 1: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/1.jpg)
STRUCTURES DEDONNÉES ET
ALGORITHMES
Esial 1ère annéeAnnée 2006-2007
![Page 2: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/2.jpg)
2Esial 1 - IB
Plan
Conception d’une solutionType AbstraitType ListeType PileType File
![Page 3: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/3.jpg)
3Esial 1 - IB
Conception d’une solution
Formuler le problème modélisation mathématique algorithme informel
Spécifier les données types de données abstraits algorithme pseudo-langage
Construire une solution structures de données et programme
![Page 4: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/4.jpg)
4Esial 1 - IB
Exemple : corriger des copies Formuler le problème
faire un corrigé des exercicesfaire un tas de copiespour chaque copie du tas, corriger et noterchaque réponse en fonctions du corrigémettre la copie sur un au tascalculer la moyenne du nouveau tas
![Page 5: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/5.jpg)
5Esial 1 - IB
Spécifier les données
utilisation d’une liste d ’exercices corrigésutilisation d’une pile de copiespossibilité d’enlever une copie de la pilepossibilité d’accéder aux corrigés de laliste de corrigés
![Page 6: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/6.jpg)
6Esial 1 - IB
Algorithme pseudo langage (1)corriger(c : Copie) = note : Entier
total ← 0L ← exercices_corrigéspourchaque élément de exercices_rendu(c)
chercher l’élément correspondant dans Lcomparer et noter l ’exercicetotal ← total + note
finpourchaquenote ← total
![Page 7: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/7.jpg)
7Esial 1 - IB
Algorithme pseudo langage (2)
corriger(tas : Pile) = nouveau_tas : Piletantque ¬vide(tas)
copie ← dépiler(tas)note ← corriger(copie)recopier la note dans la base de notesajouter(nouveau_tas,copie)
fintantque
![Page 8: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/8.jpg)
8Esial 1 - IB
Construire une solutionList exercicesRendus(List ex) {
List corrigé;for(Iterator It=ex.iterator() ; It.hasNext() ; ) {
chercher( corrigé, it.next() )...
}return corrigé;
}
![Page 9: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/9.jpg)
Type Abstrait
![Page 10: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/10.jpg)
10Esial 1 - IB
Définition
Les données sont considérées de manièreabstraiteOn se donne : une notation un ensemble d’opérations les propriétés de ces opérations
Voir cours IB1
![Page 11: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/11.jpg)
Type Liste
Séquence finie, éventuellementvide, d’éléments de même type
![Page 12: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/12.jpg)
12Esial 1 - IB
Exemples de listesGagnants au Loto dans l’amphi ()
Cours IB (IB1, IB2, IB3)
Nombres premiers inférieurs à 20 (2,3,5,7,11,13,17,19)
chaîne de caractères « hello » Peut être vue comme une liste de caractères (‘h’, ‘e’, ‘l’, ‘l’, ‘o’)
![Page 13: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/13.jpg)
13Esial 1 - IB
Terminologie
longueur : nombre d’éléments composantla listeune liste de longueur zéro est une listevideune liste non vide comprend un premierélément appelé tête.Le reste de la liste est appelé queue
![Page 14: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/14.jpg)
14Esial 1 - IB
Terminologie
À chaque élément d’une liste est associéeune position (un entier)une sous-liste est une liste composée deséléments dont la position ∈ [i, j]un préfixe est une sous-liste quicommence au début de la listeun suffixe est une sous-liste qui se termineà la fin de la liste
![Page 15: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/15.jpg)
15Esial 1 - IB
Exercice : (2,7,1,8,2)
Longueurtêtequeuepréfixessuffixessous-listes
52(7,1,8,2)
(), (2), (2,7), (2,7,1), ..., (2,7,1,8,2)
(2,7,1,8,2), (7,1,8,2), …, (8,2), (2), ()
(), (2), (7), …, (2,7), (7,1), …, (2,7,1),...
![Page 16: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/16.jpg)
16Esial 1 - IB
Sorte ListeOpérations
Opérations sur les listes
liste_vide : appartient :supprimer :longueur :est_vide :ième :concaténer :
→ ListeListe x Elément → BooléenListe x Elément → ListeListe → EntierListe → BooléenListe x Entier → ElémentListe x Liste → Liste
![Page 17: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/17.jpg)
17Esial 1 - IB
Opérations (suite)tête : Liste → Elémentqueue : Liste → Listechercher : Liste x Elément → Entierinsérer_tête : Liste x Elément → Listeinsérer_queue: Liste x Elément → Listeinsérer : Liste x Entier x Elément → Liste...
![Page 18: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/18.jpg)
18Esial 1 - IB
Axiomatisation
Choix des constructeursliste_vide : → Listecons : Elément x Liste → Liste
Les constructeurs sont les opérateursélémentaires permettant de construire une listeCela correspond à la création d’un objet en JavaEt plus généralement à de l’allocation mémoire
![Page 19: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/19.jpg)
19Esial 1 - IB
Définition des fonctionslongueur(liste_vide) = 0longueur(cons(e,L)) = 1 + longueur(L)
Exemple :longueur(cons(a,cons(b,liste_vide)))1 + longueur(cons(b,liste_vide))1 + 1 + longueur(liste_vide)1 + 1 + 02
![Page 20: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/20.jpg)
20Esial 1 - IB
Autre exempleappartient(liste_vide, e) = fauxappartient(cons(e,L), f) = si e=f
alors vraisinon appartient(L, f)
appartient(cons(1,cons(2,liste_vide)), 2)appartient(cons(2,liste_vide), 2)vrai
![Page 21: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/21.jpg)
21Esial 1 - IB
Axiomatisation (suite)tête(cons(e,L)) = equeue(cons(e,L)) = L
concaténer(liste_vide, L’) = L’concaténer(cons(e,L), L’) = cons(e, concaténer(L,L’))
insérer_tête(L,e) = cons(e,L)insérer_queue(L,e) = concaténer(L,cons(e,liste_vide))
ième(cons(e,L), 0) = eième(cons(e,L), i) = ième(L, i-1)
si 1 ≤ i ≤ longueur(L)
…
![Page 22: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/22.jpg)
Passage à l’implantation
![Page 23: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/23.jpg)
23Esial 1 - IB
Interface Listpublic interface List extends Collection {
int size();boolean isEmpty();boolean contains(Object o);boolean add(Object o);boolean remove(Object o);Object get(int index);Object set(int index, Object element);Object add(int index, Object element);int indexOf(Object o);…
}
![Page 24: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/24.jpg)
24Esial 1 - IB
Comment représenter une liste?
Par cons et liste_vide ?Par une liste chaînée ?Par un tableau ?Par une liste doublement chaînée ?Par un tableau et des index vers lessuivants ?…
![Page 25: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/25.jpg)
25Esial 1 - IB
Implantation par un tableau
data : tableau mémorisant les élémentslength : capacité courantesize : longueur de la liste
A B C Ddata
size = 4length = 6
![Page 26: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/26.jpg)
26Esial 1 - IB
Classe ArrayListpublic class ArrayList extends AbstractList implements List … {
private Object data[];private int size;…
}
![Page 27: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/27.jpg)
27Esial 1 - IB
Recherche séquentiellepublic int indexOf(Object e) { for (int i = 0; i < size; i++) if (equals(e, data[i])) return i; return -1; }
private boolean equals(Object o1, Object o2) { return o1 == null ? o2 == null : o1.equals(o2);}
A B C DindexOf(C)i = 0 cond = fauxi = 1 cond = fauxi = 2 cond = vraiResult = 2
![Page 28: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/28.jpg)
28Esial 1 - IB
Insertion en queue : add(D)public boolean add(Object e) { if (size == data.length) ensureCapacity(size + 1); data[size++] = e; return true; } public void ensureCapacity(int minCapacity) { int current = data.length; if (minCapacity > current) { Object[] newData = new Object[Math.max(current * 2, minCapacity)]; System.arraycopy(data, 0, newData, 0, size); data = newData; } }
A B C
A B C D
A B C
A B C D
A B C
![Page 29: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/29.jpg)
29Esial 1 - IB
Insertion en tête : add (0,D) public void add(int index, Object e) { checkBoundInclusive(index); if (size == data.length) ensureCapacity(size + 1); if (index != size) System.arraycopy(data, index, data, index + 1, size - index); data[index] = e; size++; } private void checkBoundInclusive(int index) { if (index > size) { throw new IndexOutOfBoundsException( "Index: " + index + ", Size: " + size); } }
A B C
A B C D
A A B C
D A B C
![Page 30: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/30.jpg)
30Esial 1 - IB
Suppression public Object remove(int index) { checkBoundExclusive(index); Object r = data[index]; if (index != --size) System.arraycopy(data, index + 1, data, index, size - index); // Aid for garbage collection data[size] = null; return r; } private void checkBoundExclusive(int index) { if (index >= size) throw new IndexOutOfBoundsException( "Index: " + index + ", Size: " + size); }
A B C D
A B C D
A B C D
B B C D
B C D D
![Page 31: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/31.jpg)
31Esial 1 - IB
Résumé
Recherche : linéaireInsertion en queue : temps constantInsertion en tête : linéaireSuppression en queue : temps constantSuppression en tête : linéaire
![Page 32: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/32.jpg)
32Esial 1 - IB
Implantation par une listechaînée
Liste first : première cellule de la liste size : taile de la liste
Cellule data : élément de la cellule next : prochaine cellule
A B C...
![Page 33: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/33.jpg)
33Esial 1 - IB
Classes LinkedList et Entrypublic class LinkedList extends AbstractSequentialList implements List { private Entry first; private int size = 0; public int indexOf(Object o) { … }}private static class Entry { Object data; Entry next; Entry(Object data) { this.data = data; }}
![Page 34: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/34.jpg)
34Esial 1 - IB
Recherche séquentielle public int indexOf(Object o) { int index = 0; Entry e = first; while (e != null) { if (equals(o, e.data)) { return index; } index++; e = e.next; } return -1; }
A B CindexOf(B)
return 0
A B C
return 1
Result = 1
![Page 35: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/35.jpg)
35Esial 1 - IB
Insertion en tête public void addFirst(Object o) { Entry e = new Entry(o); if (size == 0) { first = e; } else { e.next = first; first = e; } size++; }
B
A
addFirst(A)addFirst(B)
![Page 36: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/36.jpg)
36Esial 1 - IB
Insertion en queue private void addLast(Object o) { Entry e = new Entry(o); if (size == 0) { first = last = e; } else { last.next = e; last = e; } size++; }
B
A
addLast(A)addLast(B)
e
![Page 37: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/37.jpg)
37Esial 1 - IB
Résumé
Recherche : linéaireInsertion en queue : temps constantInsertion en tête : temps constantSuppression en queue : temps constantSuppression en tête : temps constant
![Page 38: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/38.jpg)
38Esial 1 - IB
Question
Peut-on se passer de LinkedList et utiliserdirectement Entry ?
A B C
A B C
A la place de :
![Page 39: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/39.jpg)
39Esial 1 - IB
Questions
Comment représenter la liste vide ?Comment représenter une liste avec 1élément ?Comment représenter une liste avec 2éléments ?
Nil A
A B
Nil
Nil
![Page 40: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/40.jpg)
40Esial 1 - IB
Intérêts / Problèmes
Ressemble aux types abstraits (head,tail)Accès à la ième position peu efficaceNombre d’éléments peu efficaceOn pourrait stocker de l’information dansles cellules, mais c’est peu pratique
Nil A
A B
Nil
Nil
1
2 1
![Page 41: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/41.jpg)
41Esial 1 - IB
Double chaînage
A B C...
Liste first : première cellule de la liste last : dernière cellule de la liste size
Cellule data : élément de la cellule next : prochaine cellule previous : cellule précédente
![Page 42: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/42.jpg)
42Esial 1 - IB
Insertion au milieu public void add(int index, Object o) { checkBoundsInclusive(index); Entry e = new Entry(o); if (index < size) { Entry after = getEntry(index); e.next = after; e.previous = after.previous; if (after.previous == null) { first = e; } else { after.previous.next = e; } after.previous = e; size++; } else { addLastEntry(e); } }
A B Cfirstlastsize
addLast(D,1)
D
after
e Entry getEntry(int n) { Entry e; if (n < size / 2) { e = first; // n less than size/2, iterate from start while (n-- > 0) { e = e.next; } } else { e = last; // n greater than size/2, iterate from end while (++n < size) { e = e.previous; } } return e; }
![Page 43: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/43.jpg)
43Esial 1 - IB
Résumé
Ajout et suppression en tête ou queue presqueaussi efficace que dans le cas simplementchaînéAvantages : Déplacement de la droite vers la gauche Accès indexé plus efficace
Inconvénients Taille des cellules plus importante Administration des pointeurs plus complexe
![Page 44: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/44.jpg)
44Esial 1 - IB
Pour en finir avec les listes
Les types abstraits permettent de raisonnerExemples de termes
t_1 = insérer_tête(insérer_tête(liste_vide,2),1)
t_2 = insérer_ queue(insérer_ queue(liste_vide,1),2)
A-t-on t_1 = t_2 ?
![Page 45: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/45.jpg)
45Esial 1 - IB
Preuvet_1 = insérer_tête(insérer_tête(liste_vide,2),1)
= insérer_tête(cons(2,liste_vide),1)= cons(1,cons(2,liste_vide))
insérer_queue(liste_vide,e) = cons(e,liste_vide) insérer_queue(cons(e,L),e’) = cons(e, insérer_queue(L,e’)
t_2 = insérer_ queue(insérer_ queue(liste_vide,1),2) insérer_ queue(liste_vide,1) = cons(1,liste_vide)
= insérer_ queue(cons(1,liste_vide),2)= cons(1,insérer_queue(liste_vide,2))= cons(1,cons(2,liste_vide)))
d ’où t_1 = t_2
![Page 46: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/46.jpg)
Type Pile
LIFO : Last In, First OutLes insertions et les suppressionsse font à une seule extrémité : le
sommet
![Page 47: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/47.jpg)
47Esial 1 - IB
Opérations sur les piles
Sorte PileOpérations
pile_vide :sommet :empiler :dépiler :est_vide :
→ PilePile → ElémentPile x Elément → PilePile → PilePile → Booléen
![Page 48: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/48.jpg)
48Esial 1 - IB
Axiomatisation
Constructeurspile_vide : → Pileempiler : Pile x Elément → Pile
Définition des fonctionssommet(empiler(P,e)) =dépiler(empiler(P,e)) =est_vide(pile_vide) =est_vide(empiler(P,e))=
ePvraifaux
![Page 49: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/49.jpg)
49Esial 1 - IB
Implantation par un tableau
items : tableau mémorisant les élémentscapacity : capacité courantetop : sommet de la pile
A B C Ditems
capacity = 6top
![Page 50: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/50.jpg)
50Esial 1 - IB
Implantation
D’une manière générale, on peut implanter lespiles en utilisant des listes Représentées par un tableau Chaînées
Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe Stack est implantée en utilisant
Vector (version synchronisée de ArrayList)
![Page 51: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/51.jpg)
51Esial 1 - IB
Exemples d’utilisation de piles
évaluation d’expression (3+4)*2 se note également 3 4 + 2 *empiler(3), évaluer(sommet())empiler(4), évaluer(sommet())empiler(+), évaluer(sommet())
dépiler(), a ← sommet(), depiler() b ← sommet(), depiler()
empiler(a+b)empiler(2), ...
3
3 4
3 4 +
7
14
2 *
![Page 52: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/52.jpg)
52Esial 1 - IB
ComparaisonListe chaînée extension peu coûteuse pas de déplacement des éléments
Tableau gain d’espace mémoire consécutive
Le choix dépend de l’utilisation connaît-on la taille maximale de la pile ? veut-on une efficacité maximale ?
![Page 53: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/53.jpg)
Type File
FIFO : First In, First OutLes adjonctions se font à une
extrémité et les suppressions àl’autre
![Page 54: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/54.jpg)
54Esial 1 - IB
Exemple
File
PremierDernier
![Page 55: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/55.jpg)
55Esial 1 - IB
Opérations sur les files
Sorte FileOpérations
file_vide :premier :ajouter :retirer :est_vide :
→ FileFile → ElémentFile x Elément → FileFile → FileFile → Booléen
![Page 56: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/56.jpg)
56Esial 1 - IB
Axiomatisation
Constructeursfile_vide : → Fileajouter : File x Elément → File
Définition des fonctionspremier(ajouter(F,e)) =premier(ajouter(F,e)) =retirer(ajouter(F,e)) =retirer(ajouter(F,e)) =
e si est_vide(F) = vraipremier(F) si est_vide(F) = fauxfile_vide si est_vide(F) = vraiajouter(retirer(F),e)
si est_vide(F) = faux
![Page 57: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/57.jpg)
57Esial 1 - IB
Implantation
On peut utiliser LinkedList, en se limitant à : addLast removeFirst
On peut également utiliser ArrayList, mais : remove(0) est une opération coûteuse Il faut décaler tous les éléments vers la gauche
Y-a-t-il une autre implantation possible ?Oui, les Queue (depuis Java 1.5)
![Page 58: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/58.jpg)
58Esial 1 - IB
Implantation par un tableaufront : index de la tête de la fileback : index du dernier élément de lafile
A B C D E
A B C D E F
backfront
backfrontajouter F
B C D E Fbackfront
retirer
G B C D E Fback front
ajouter G
![Page 59: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/59.jpg)
59Esial 1 - IB
Implantation par un tableauvoid wipeOut() { front = 1; back = 0;}
back
front
void enqueue(Object o) { back = (back+1) % size; items.set(back, o);}
Aback
front
boolean isEmpty { return (front == back+1) % size);}
boolean isFull() { return (front == (back+2) % size);}
![Page 60: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/60.jpg)
60Esial 1 - IB
ExerciceImplanter les QueueComparer les performances avec Les LinkedList Les ArrayList
![Page 61: STRUCTURES DE DONNÉES ET ALGORITHMES...Représentées par un tableau Chaînées Intérêts Réduit les efforts d’implantation Permet d’aller lire dans la pile En Java, la classe](https://reader035.vdocuments.mx/reader035/viewer/2022070713/5ed21866328bb40b054862c7/html5/thumbnails/61.jpg)
The End