Présentation Structures de Données et TDA

Slides:



Advertisements
Présentations similaires
Piles, files et listes: notions théoriques
Advertisements

Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Au programme du jour …. Un peu plus de structures de données
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Approfondissement du langage
Algorithme et structure de données
Chap. 1 Structures séquentielles : listes linéaires
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Principes de programmation (suite)
Structures collectives en Java
Structures de données linéaires
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
II. Chaînage, SDD séquentielles
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
Premier cours (23 septembre). Cours programmation- orientée objet en Java Licence dinformatique Hugues Fauconnier
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Structures de données IFT-2000
Les fichiers indexés (Les B-arbres)
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Introduction au paradigme orienté-objet (suite)
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
IFT 6800 Atelier en Technologies d’information
Cours du 22 novembre généricité. Chapitre VII Généricité.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Plan cours La notion de pointeur et d’adresse mémoire.
Le langage C Structures de données
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
La notion de type revisitée en POO
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
11/04/ L'héritage Cours 7 Cours 7.
Cours 7 Classes locales Clonage Divers: tableaux.
Tutorat en bio-informatique
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
ETNA – 1ème année Guillaume Belmas –
ISBN Chapitre 10 L'implémentation des sous- programmes.
Tutorat en bio-informatique Le 15 novembre Exercices 1 et 2 (MAT1400) - solutions Chapitre 12.2, Analyse - concepts et contextes vol. 2 19) Calculez.
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
1 Listes des méthodes de la classe string, et exemples.
 Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Types abstraits de données (TAD)
CSI2510 Structures des Données et Algorithmes
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Présentation Structure données abstraite (TDA) Rappel : File
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Présentation Chaînage dynamique Retour sur les tableaux
Structure de données Les listes.
Transcription de la présentation:

Présentation Structures de Données et TDA Chaînage dynamique Retour sur les tableaux Allocation dynamique Liens entre les données Création de la classe Noeud Exemples

Chaînage dynamique Retour sur les tableaux [ ] Allocation dynamique Les tableaux en java sont statiques On ne peut pas augmenter ou diminuer le nombre de cases d’un tableau en cours d’exécution. Allocation dynamique Lorsqu’on crée un objet (new), l’espace mémoire est alloué en cours d’exécution. Nous pouvons libérer l’espace mémoire d’un objet en cours d’exécution. Nous pouvons conserver des données à l’aide d’un objet. Truc : Mettre les données dans des objets plutôt que dans un tableau.

Chaînage dynamique 1 5 7 9 11 15 2 17 8 Liens entre les données Dans un tableau statique les données sont consécutives en mémoire. Les objets ne sont pas consécutifs en mémoire. Tableau Objets 1 5 7 9 11 15 2 17 8 5 7 9 11 17 8 2 1 15

Chaînage dynamique 1 Lien 5 Lien 7 Lien Il faut prévoir un mécanisme pour faire le liens entre les objets pour simuler un tableau. Chaînage dynamique La stratégie est de créer une structure qui contient l’objet et un lien vers la donnée suivante. On appelle un nœud, la structure qui contient l’objet et le lien vers le suivant. 1 Lien 5 Lien 7 Lien

La classe Nœud : //Une classe interne et ainsi on peut accéder directement aux //attributs à partir de la classe parent. Public class Nœud{ //attributs, l’objet + le lien private Object element; private Nœud suivant; //constructeur public Nœud(Object element, Nœud suivant){ this.element = element; this.suivant = suivant; }

Chaînage dynamique 1 noeud 5 null Exemple : Nœud tableau; //insertion d’une donnée dans le tableau tableau = new Nœud(new Integer(1),null); //insertion d’une donnée à la suite Noeud nœud = new Nœud(new Integer(5),null); tableau.suivant = noeud; tableau noeud Enveloppeur (wrapper) 1 noeud 5 null

while(i != n && position != null){ position = position.suivant; i++; } Récupérer un élément dans le tableau (équivalent à tableau [n]) //Dans cet exemple, on ne lève pas d’exception si n invalide public Object getElement(int n){ //on crée un nœud qu’on place au début du tableau Nœud position = tableau; int i = 1; /On se déplace tant qu’on a pas trouvé ce qu’on cherche ou //qu’on a pas atteint la fin du tableau (null) while(i != n && position != null){ position = position.suivant; i++; } if(position != null) return position.element; return null; ]

Structure de données Les listes

Structure de données Liste Structure de données permettant de conserver des données consécutivement de façon linéaire. Services offerts : Insérer un élément Enlever un élément Chercher un élément La liste est-elle vide ? Nombre d’éléments ...

Structure de données Implémentation Dans un tableau statique Par chaînage dynamique Dans tous les cas on peut faire l’implémentation en conservant des informations sur la liste à l’extérieur de la liste

Structure de données Représentation graphique Dans un tableau statique Simplement chaînée Doublement chaînée

Structure de données Représentation graphique avec infos sur la liste Nombre d’éléments Debut Fin 4 Information supplémentaire

Structure de données Implémentation du déplacement À partir d’un indice (comme un tableau) On passe toujours l’indice en paramètre Ex: liste.insere(element,2); //insère à la 2ième position À partir d’une position courante implicite dans la liste L’insertion se fait toujours à une position courante Exemple : liste.premier(); //position au premier élément liste.suivant(); //passe au suivant liste.insere(element); //insère à la 2ième position

Structure de données Via un itérateur (une classe définie) fourni par la liste. L’utilisateur peut obtenir l’itérateur de la liste Iterateur position = liste.iterateur(); position.suivant() //déplace l’itérateur position.insere(element); *Rend le déplacement vraiment indépendant de la liste. *C’est la version implémentée dans Java (java.util.LinkedList et java.util.ListIterator)

Structure de données Exemple d’une classe itérateur La liste Lien sur le précédent Position courante Un objet de la classe Iterateur

Structure de données Pourquoi choisir une implémentation plutôt qu’une autre ? Tableau statique Nombre d’éléments maximum connu Données de petite taille Simplement chaînée Nombre d’éléments maximum inconnu, beaucoup d’insertion et peu de recherche Données de grande taille (autre langage que Java)

Structure de données Pourquoi choisir une implémentation plutôt qu’une autre ? Doublement chaînée Nombre d’éléments maximum inconnu, peu d’insertion et beaucoup de recherche Itérateur Sauve de l’espace mémoire par rapport à la liste doublement chaînée Rendre l’itérateur indépendant de la liste Peut avoir plusieurs itérateurs sur une même liste

Structure de données Que faire pour implémenter une liste ? Décider du choix de l’implémentation Décider des services à offrir Implémenter un service à la fois Tester tous les scénarios possibles (début, milieu, fin, vide) pour un service avant de passer au suivant Tester des combinaisons (insère, insère , cherche , supprime, insère,...)

Liste que nous implémenterons Debut Fin Nombre Éléments Structure de données Liste que nous implémenterons Debut Fin Nombre Éléments Position courante 4

Retour sur la pile et la file Structure de données Retour sur la pile et la file

Structure de données Implémentation d’une pile en composant avec une liste On peut voir la pile comme un cas particulier d’une liste. Empile //insèreDébut Depile //getElement + supprime estVide //estVide Vider //supprimeTout DepileSansEnlever //getElement

Structure de données Implémentons d’une file avec une liste On peut voir la file comme un cas particulier d’une liste. Enfile //insère à la fin Defile //premier + getElement() + supprime estVide //estVide Vider //supprimeTout DefileSansEnlever //premier + getElement()

Présentation Structure données abstraite (TDA) Définition Spécification vs implémentation File Pile

Structure de données Structure de données : Type de données abstrait Conteneur de données du même type. Type de données abstrait Une structure de données qui utilise l’encapsulation Deux aspects Services offerts (spécification des méthodes) Implémentation

Implémentation Structure de données Chaînage dynamique Tableau statique Le nombre d’éléments maximum est limité. L’espace mémoire est réservé totalement à la compilation. Chaînage dynamique Le nombre d’éléments est illimité. L’espace mémoire est réservé à l’exécution sur demande.

Structure de données Représentation graphique Dans un tableau statique Simplement chaînée

Pile

Pile (LIFO; Last In First Out) Structure de données Pile (LIFO; Last In First Out) Structure de données où on insère et on enlève toujours au début (dessus) Même principe que la pile dans la vie courante Pile d’assiette, pile de linge, … Fortement utilisé en informatique Pile système, pile d’opérateurs arithmétiques, …

Structure de données Service d’une Pile Empile //Élément sur le dessus de la pile Depile //Enlève et retourne l’élément //du dessus de la pile estVide //retourne si la pile est vide Vider //Enlève tous les éléments DepileSansEnlever //Retourne l’élément du dessus //sans l’enlever de la pile

Antécédents et conséquents

Structure de données Les antécédents, les conséquents et la levée d’exceptions deviennent importants. Un antécédent non respecté lève une exception. On doit annoncer Les conditions préalables (antécédent) L’état de la structure après l’opération (conséquent) Les messages d’exception

Structure de données Exemple: Dépiler() Antécédent : la Pile ne doit pas être vide Conséquent : l’élément n’est plus dans la pile Throws PileVideException

File

File (FIFO; First In First Out) Structure de données File (FIFO; First In First Out) Structure de données où on insère à la fin et on retire au début (dessus) Même principe que la file d’attente dans la vie courante File à la banque, à l’épicerie, … Fortement utilisé en informatique Imprimante, réseau, …

Structure de données Service d’une File Enfile //Insère à la fin de la file Defile //Enlève et retourne le premier de la //file estVide //retourne si la file est vide Vider //Enlève tous les éléments DefileSansEnlever //Retourne l’élément du dessus //sans l’enlever de la file