Télécharger la présentation
Publié parRachel Brousseau Modifié depuis plus de 9 années
1
CSI2510 Structures des Données et Algorithmes
CSI Paola Flocchini
2
Structures de données? Comment organiser les données pour optimiser l’efficacité des opérations qu’il faut effectuer sur les données CSI2510 CSI Paola Flocchini
3
Structures de données? Exemple: Contient des données différents:
l‘annuaire de téléphone électronique Pierre Contient des données différents: - Des noms Des numéro de téléphone Des adresses Michele 75 Bronson Sylvie 110 Bank Paola OPERATIONS: - ajouter - effacer chercher un numéro de téléphone chercher une adresse CSI2510 CSI Paola Flocchini
4
Structures de données? Exemple: Lisa 223-4433 Pierre 543-1234 Michael
Michele John 110 Bank 75 Bronson Paola Lisa Pierre Michael Anne Lisa Pierre Michael Anne Lisa Pierre Michael Anne CSI2510 CSI Paola Flocchini
5
Structures de données? Exemple: Anne 321-6745 Lisa 223-4433 Pierre
Michele John 110 Bank 75 Bronson Paola Anne Lisa Pierre Michael CSI2510 CSI Paola Flocchini
6
Structures de données? Penser aux opérations que vous avez besoin d’exécuter. Choisir la meilleure structure pour vos données. Nous allons étudier les différentes structures de données. Comment savoir si une structure de données est bonne ? CSI2510 CSI Paola Flocchini
7
Les objectifs du cours Présenter, de façon systématique, les structures de données le plus utilisées, en soulignant leurs propriétés abstraites. Discuter des algorithmes typiques qui traitent chaque type de structure, et analyser leur performance. Comparer les différentes structures de données pour résoudre des problèmes similaires, et choisir la meilleure CSI2510 CSI Paola Flocchini
8
Rappel Tableaux Structures chaînées CSI2510 1 2 3 4 5 6 7
1 2 3 4 5 6 7 NULL CSI2510 CSI Paola Flocchini
9
Opérations typiques sur les objets Insérer un objet Supprimer un objet
Chercher un objet CSI2510 CSI Paola Flocchini
10
Tableau A: structure statique accès direct aux cellules
1 2 3 4 5 6 7 A: Ensemble de longueur fixe, composé de cellules indexées contenant des variables du même type. structure statique accès direct aux cellules Insertion ? Suppression ? CSI2510 CSI Paola Flocchini
11
Tableau a c d m o f Un exemple d’insertion dans un tableau trié 1 2 3
1 2 3 4 5 6 7 f Un exemple d’insertion dans un tableau trié CSI2510 CSI Paola Flocchini
12
Tableau a c d m o a c d m o a c d m o a c d f m o f
Déplacer ‘m’ et ‘o’ pour faire de la place pour ‘f’ f a c d m o 1 2 3 4 5 6 7 a c d m o 1 2 3 4 5 6 7 a c d m o 1 2 3 4 5 6 7 a c d f m o 1 2 3 4 5 6 7 CSI2510 CSI Paola Flocchini
13
Tableau a c d f m o p z 1) Pour des insertions et des suppressions,
1 2 3 4 5 6 7 1) Pour des insertions et des suppressions, les éléments doivent être déplacés. 2) et si le tableau est plein? CSI2510 CSI Paola Flocchini
14
Structures chaînées Structure dynamique Accès séquentiel aux éléments
NULL Structure dynamique Accès séquentiel aux éléments Ajout et suppression sans déplacer les éléments CSI2510 CSI Paola Flocchini
15
Liste simplement chaînée
NULL Nœud v Suivant (next) Objet élément Nœud suivant v élément CSI2510 CSI Paola Flocchini
16
Liste simplement chaînée
L’implémentation en Java sera traitée durant les séances de laboratoire Une liste chaînée possède normalement ces méthodes: setElement(Object e) setNext(Object newNext) getElement() getNext() La liste chaînée (SlinkedList) est définie par le nœud tête (head) et par sa taille (size) CSI2510 CSI Paola Flocchini
17
Liste simplement chaînée - Insertion
Configuration originale: head NULL v But: insérer l’élément v dans la liste. CSI2510 CSI Paola Flocchini
18
Insertion au début d’une liste
simplement chaînée head head v size size+1 NULL v.setNext(head) v (facile) … Nous utilisons pseudocode … head v == la variable head aura la valeur de la variable v CSI Paola Flocchini CSI Paola Flocchini
19
Liste simplement chaînée : Insertion après r
w r head NULL v w getNext(r ) v.setNext(w) r.setNext(v) size size+1 Facile CSI2510 CSI Paola Flocchini
20
r h v Liste simplement chaînée : Insertion avant r
NULL v Maintenir un pointeur à l’élément précédant (parcourir le liste) ou Échanger les contenus pointés par r et v et insérer v après r. (plus difficile) CSI2510 CSI Paola Flocchini
21
Liste simplement chaînée - Recherche
head NULL tmp Traverser la liste Node tmp; tmp firstnode; while (tmp != null ) { if (tmp .element = élément qu’on recherche) return tmp ; } else {………..} CSI2510 CSI Paola Flocchini 21
22
Liste simplement chaînée - Recherche
head NULL tmp Node tmp; tmp firstnode; while (tmp != null ) { if (tmp.element = élément qu’on recherche) return tmp ; } else { tmp tmp.getNext() } Traverser la liste CSI2510 CSI Paola Flocchini 22
23
Liste simplement chaînée - Suppression
head NULL Premier élément (facile) Élément après r (facile) Élément à r (difficile) head head.getNext() … w r.getNext() r.setNext(w.getNext()) ….. Utiliser un pointeur à l’élément précédant, ou Échanger les contenus de l’élément à r avec les contenus de l’élément suivant, et effacer l’élément après r. **Très difficile si r indique dernier élément! CSI2510 CSI Paola Flocchini
24
Liste doublement chaînée
trailer header Suivant(next) Précédent (prev) Chaque nœud (Dnode) contient: Un élément (element) Un lien vers le nœud précédent (prev) Un lien vers le nœud suivant (next) Noeud(DNode) CSI2510 CSI Paola Flocchini
25
Liste doublement chaînée
trailer header Méthodes de la classe Dnode: void setElement(Object e) void setPrev(DNode newPrev) void setNext(DNode newNext) Object getElement() DNode getPrev() DNode getNext() La liste doublement chaînée (DList) est définie par les deux nœuds spéciaux tête (header) et queue (trailer) et par sa taille (size) CSI2510 CSI Paola Flocchini
26
Liste doublement chaînée –Suppression (début)
Supprimer v u v.getPrev() u w v.getNext() w v u.setNext(w) trailer header w.setPrev(u) v.setPrev(null) v.setNext(null) size size-1 CSI2510 CSI Paola Flocchini
27
Liste doublement chaînée –Suppression (milieu)
w Supprimer v u v trailer header u v.getPrev() w v.getNext() w.setPrev(u) u.setNext(w) v.setPrev(null) v.setNext(null) size size-1 CSI2510 CSI Paola Flocchini 27
28
Liste doublement chaînée - Insertion (début)
w Insérer v header trailer v w header.getNext() v.setNext(w) v.setPrev(header) w.setPrev(v) header.setNext(v) Size size+1 CSI2510 CSI Paola Flocchini 28
29
Liste doublement chaînée - Insertion (après p)
w header Insérer v après p trailer v w p.getNext() v.setNext(w) v.setPrev(p) w.setPrev(v) p.setNext(v) size size+1 CSI2510 CSI Paola Flocchini 29
30
Liste doublement chaînée - Insertion (avant p)
Insérer v avant p header trailer v p header trailer v CSI2510 CSI Paola Flocchini 30
31
Conclusion: Structures chaînées vs Tableaux
trailer header 1 2 3 4 5 6 7 Structure Chaînée Tableau Structure dynamique (jamais pleine) Structure figée Pas besoin de déplacer les éléments lors des insertions - suppressions Insertions suppressions des éléments plus laborieuses Pas d’accès direct à un élément donné de la structure (parcours de la structure obligatoire) Accès direct à une cellule donnée CSI Paola Flocchini CSI Paola Flocchini 31
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.