1 STRUCTURES DE DONNEES ELEMENTAIRES. PLAN Types abstraits et structures de données Piles et files Listes chaînées Listes contiguës ordonnées

Documents pareils
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Génie Logiciel avec Ada. 4 février 2013

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Structure fonctionnelle d un SGBD

Chapitre 2. Classes et objets

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Exercices INF5171 : série #3 (Automne 2012)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Correction TD Algorithmique 5.3 Pile Liste 5.3 Pile

Algorithmique, Structures de données et langage C

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Recherche dans un tableau

Java Licence Professionnelle CISII,

Introduction à la programmation concurrente

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Le modèle de données

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Cours d initiation à la programmation en C++ Johann Cuenin

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Définition des Webservices Ordre de paiement par . Version 1.0

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

1. Introduction Création d'une requête...2

LES BIBLIOTHEQUES DE WINDOWS 7

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Systemes d'exploitation des ordinateurs

Conventions d écriture et outils de mise au point

Structurer ses données : les tableaux. Introduction à la programmation

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

Architecture des Systèmes d Information Architecture des Systèmes d Information

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Console IAP Manuel d utilisation

I. Introduction aux fonctions : les fonctions standards

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Utilisation d objets : String et ArrayList

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

SOMMAIRE. Travailler avec les requêtes... 3

Styler un document sous OpenOffice 4.0

Plateforme PAYZEN. Définition de Web-services

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours 14 Les fichiers

TD/TP PAC - Programmation n 3

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Définitions. Numéro à préciser. (Durée : )

ACTIVITÉ DE PROGRAMMATION

Programmation avec des objets : Cours 7. Menu du jour

Programme Compte bancaire (code)

Traduction des Langages : Le Compilateur Micro Java

Structures dynamiques Listes chaînées

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Créer sa première base de données Access Partie 3/4 - Création d un formulaire

Cours Informatique Master STEP

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Généralités sur le Langage Java et éléments syntaxiques.

TABLEAU CROISE DYNAMIQUE

Initiation à la programmation en Python

4. Groupement d objets

ARBRES BINAIRES DE RECHERCHE

CHAPITRE VIII : Les circuits avec résistances ohmiques

Initiation à LabView : Les exemples d applications :

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Héritage presque multiple en Java (1/2)

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Rappel sur les bases de données

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Bases de programmation. Cours 5. Structurer les données

Travaux Dirigés n 1 : chaînes de caractères

Les structures de données. Rajae El Ouazzani

Description des structures de donnees

Compte sur livret. Mots clés : Sommaire : Compte sur livret. 1. Qui peut bénéficier d un compte sur livret? 2. Le compte sur livret au quotidien

Programmation Orientée Objet Java

L exclusion mutuelle distribuée

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Projet gestion d'objets dupliqués

Cours de Systèmes d Exploitation

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Algorithmes récursifs

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

1 Recherche en table par balayage

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

Remboursement des frais de voyage officiel

Campagnes d ings v.1.6

EXCEL TUTORIEL 2012/2013

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Introduction aux SGBDR

Application web de gestion de comptes en banques

Exercices de dénombrement

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Introduction a l'algorithmique des objets partages. Robert Cori. Antoine Petit. Lifac, ENS Cachan, Cachan Cedex. Resume

Transcription:

1 STRUCTURES DE DONNEES ELEMENTAIRES PLAN Types abstraits et structures de données Piles et files Listes chaînées Listes contiguës ordonnées 1

2.1 TYPES ABSTRAITS ET STRUCTURES DE DONNEES hiérarchie des types: types prédéfinis (integer, boolean,...) types composés (tableau d'entiers ) type de données abstrait: description d'un ensemble organisé d'objets et des opérations sur cet ensemble structure de données: impléméntation données explicite d'un type de 2

2.2 ENSEMBLES DYNAMIQUES Mathématique Informatique ensemble statique ensemble dynamique 2-2-1 CLÉS clé = identificateur d'un élément (N SS, noms, N immatriculation,.) {clés} totalement ordonné Classe élément (sera notée Elt ) -clé (entier ou de la classe C_clé) - contenu (classe C_elt quelconque) 3

2-2-2 OPÉRATIONS SUR UN ENSEMBLE DYNAMIQUE -- requête retourne une information -- modification modifie l'ensemble vide longueur recherche insertion suppression 4

2-2-3 DIFFÉRENTS TYPES DE STRUCTURES LINEAIRES piles insertion et suppression d'un même côté x x x x LIFO files insertion d'un côté et suppression de l'autre x x x FIFO listes insertion et suppression n'importe où (accès direct (Indice) ou par chaînage) 5

2-3 PILES ET FILES structures linéaires dynamiques dont les éléments sont de la classe Elt quelconque 2.3.1 LES PILES insérer = empiler supprimer = dépiler 6

Une pile est un tableau qui contient des éléments (classe Elt). On peut ajouter un élément "au-dessus" de la pile si le tableau n'est pas "plein" On peut retirer l'élément du "dessus" de la pile si le tableau n'est pas "vide" le seul élément de la pile auquel on peut avoir accès est le dernier élément qui y a été ajouté. On va définir une classe "Pile" 7

implémentation d'une pile classe Pile{ entier taille; //taille du tableau représentant la pile Elt[ ] tpile; entier long=0; //nombre d'éléments dans la pile //ce tableau contient des objets de la classe Elt Pile( entier t){ this.taille=t; this.tpile=new Elt[t]; } //les méthodes } 8

méthodes sommet retourne Elt empiler (Elt x) dépiler( ) x x estvide( ) retourne booléen conditions pile non vide pile non pleine pile non vide 9

EXEMPLE pile=new Pile(10) pile.estvide( )=vrai 7 8 4 pile.empiler (4) pile.empiler (8) pile.empiler (7) pile.sommet 4 8 7 10

EXEMPLE 9 7 8 4 pile.empiler (9) pile.dépiler pile.sommet 7 9 7 pile.estvide( )=faux 11

LES METHODES booléen estvide( ) début retourner (this.long==0); fin fonction en «temps constant» (ici = 1 instruction) Noté O(1) Lu Ode1 12

Elt sommet ( ) début si this.estvide( ) sinon alors "erreur"; LES METHODES retourner this.tpile[long-1]; finsi; fin fonction en temps constant=o(1) Le temps d exécution ne dépend pas de la taille de la pile 13

LES METHODES void empiler (Elt x) début si this.long==taille alors "erreur"; sinon this.long = this.long+1; this.tpile[long-1] = x; finsi; fin procédure en O(1) 14

LES METHODES void dépiler ( ) début si this.long==0 alors "erreur"; sinon this.long = this.long-1; finsi; fin procédure en O(1) 15

2-3-2 LES FILES insérer = enfiler supprimer = défiler x x x exemples: en général: file circulaire file d'attente à un guichet, tampon de messages taille-1 0 1 7 tête tête queue queue 2 3 4 5 6 x x x 16

Une file est un tableau qui contient des éléments (classe Elt). On peut ajouter un élément "à la fin" (queue) de la file si le tableau n'est pas "plein" On peut retirer l'élément "au début" (tête) de la file si le tableau n'est pas "vide" le seul élément de la file auquel on peut avoir accès est le plus ancien élément qui y a été placé. On va définir une classe "File" 17

implémentation d'une file classe File{ entier taille; Elt[ ] tfile; entier tête=0; entier queue=0; File( entier t){ this.taille=t; this.tfile=new Elt[t]; } //les méthodes } 18

méthodes entête( ) retourne Elt enfiler(elt x) défiler( ) estvide( ) retourne booléen estpleine( ) retourne booléen conditions file non vide file non pleine dépôt en queue file non vide retrait en tête file vide: file pleine: tête == queue tête == (queue+1) mod taille 19

EXEMPLE 0 1 2 3 4 5 file.estvide=vrai 0 1 2 3 4 5 3 7 10 file= new File(6) file.tête= file.queue=0 file.enfiler(3) file.enfiler(7) file.enfiler(10) file.tête= 0 file.queue= 1 2 3 file.estvide( )=faux 20

EXEMPLE 0 1 2 3 4 5 3 7 10 2 5 8 file.tête=0 file.queue= 3 1 2 4 file.tête=4 file.queue= 5 (5+1) mod 6 = 0 file.défiler() file.défiler() file.enfiler(2) file.défiler() file.enfiler(5) file.défiler() file.enfiler(8) 21

EXEMPLE 0 1 2 3 4 5 2 5 8 file.tête=4 file.queue=0 file.enfiler(2) file.tête=4 file.queue=1 22

EXEMPLE 0 1 2 3 4 5 2 5 8 file.défiler() file.défiler() file.tête= 4 5 (5+1) mod6= 0 1 file.défiler() file.queue= 1 File vide car tête= queue (= 1) 23

LES METHODES booléen estvide ( ) ; début retourner (this.tête==this.queue); fin fonction en O(1) 24

EXEMPLE 0 1 2 3 4 5 2 4 6 5 8 0 1 2 3 4 5 2 4 6 3 5 8 file.tête=4 file.queue=3 file.enfiler(3) file.tête=4 file.queue=4 25

EXEMPLE 0 1 2 3 4 5 2 4 6 5 8 file.tête=4 file.queue=3 La file est pleine file.enfiler(3) est interdit tête = queue+1 une file est "pleine" si il reste une seule place non occupée dans le tableau 26

EXEMPLE 0 1 2 3 4 5 8 4 6 2 5 file.tête=0 file.queue=5 La file est pleine file.enfiler(3) est interdit tête = (queue+1) mod 6 Remarque: si queue<5 alors (queue+1) mod 6 = queue + 1 si queue=5 alors (queue+1) mod 6 = 0 27

booléen estpleine ( ) LES METHODES début retourner (this.tête == (this.queue +1) mod this.taille); fin Elt entête ( ) début si sinon finsi; fin this.estvide( ) alors "erreur"; retourner this.tfile[tête]; fonctions en O(1) 28

void enfiler (Elt x) début LES METHODES si this.estpleine( ) alors "erreur"; sinon this.tfile[queue] = x; this.queue = (this.queue+1) mod this.taille; finsi; fin procédure en O(1) 29

LES METHODES void défiler ( ) début si this.estvide( ) alors "erreur"; sinon this.tête = (this.tête +1)mod this.taille; finsi; fin procédure en O(1) 30

2-4 LISTES CHAÎNEES 2-4-1 LES POINTEURS Intérêt: - créer dynamiquement des objets - réaliser des structures chaînées Une "place" contient un élément et un pointeur valeur élément de la classe Elt suivant "pointe" sur la place suivante (null si elle n'existe pas) 31

p 6 null q p,q //pointeurs sur une "place" p.valeur=6; q=p; //alors q.valeur=6 et q.suivant=p.suivant 32

p 68 null q p,q //pointeurs sur une "place" p.valeur=6; q=p; //alors q.valeur=6 et q.suivant=p.suivant q.valeur=8; //alors p.valeur=8 aussi p = null; //p ne pointe sur rien //null : fin de structure chaînée 33

2-4-2 LES LISTES CHAÎNEES structure dynamique souple dont les éléments sont de la classe Elt quelconque insérer et supprimer en n'importe quel point une "place" = valeur: Elt élément suivant: Liste référence null une liste: référence sur la première place 34

Une liste chaînée est une structure souple qui contient des éléments (classe Elt). On peut ajouter un élément, sans condition, à n'importe quel endroit de la liste On peut retirer un élément à n'importe quel endroit de la liste si elle n'est pas "vide" on accède à un élément seulement après avoir accédé successivement à tous ceux qui le précèdent. On va définir une classe "Liste" (chaînée) 35

liste circulaire liste doublement chaînée 36

Implémentation d'une liste chaînée simple 37

classe Liste { Elt valeur; Liste suivant; Liste(Elt element, Liste reste){ this.valeur = element; this.suivant = reste; } //les méthodes } 38

création d'une liste avec un élément x : Liste liste = new Liste(x,null); Dans tout le paragraphe 2.4.2 on suppose qu'un appel d'une méthode sur liste vide (liste=null) lève une exception que nous ne préciserons pas ici. 39

LES METHODES x liste X liste = liste.insérerentête(x) Liste insérerentête (Elt x) //insère x en tête de la liste début retourner new Liste(x,this) fin procédure en O(1) 40

LES METHODES x liste p p p ok = trouver(x) booléen trouver (Elt x) //cherche l'élément x dans la liste; renvoie vrai si il y est, renvoie faux sinon début Liste p = this; tant que p null faire si p.valeur==x alors retourner vrai; fait; sinon p = p.suivant; finsi; retourner faux; fin 41

booléen trouver (Elt x) //cherche l'élément x dans la liste; renvoie vrai si il y est, renvoie faux sinon début Liste p = this; tant que p null faire si p.valeur==x alors retourner vrai; fait; sinon p = p.suivant; finsi; retourner faux; fin LES METHODES Le temps d exécution "dépend" du nombre n d'éléments dans la liste Procédure en O(n) 42

q y LES METHODES liste x X p Liste inséreraprès ( Elt x; Elt y) // ajoute l'élément y après x, si x est présent; début Liste p = this; liste = liste.inséreraprès(x,y) tant que p null et p.valeur x faire p = p.suivant;fait; si p==null alors "erreur" //élément x absent de la liste sinon Liste q = new Liste(y,p.suivant); p.suivant = q ; finsi; fin Retourner p; procédure en O(n) 43

LES METHODES liste.. p q null x null Liste insérerenqueue ( Elt x) //insère x en queue de la liste (en tête si la liste est vide) début Liste p = this; Liste q= new Liste(x,null); liste = liste.insérerenqueue(x) fin tant que p.suivant null faire p = p.suivant; fait; p.suivant = q; retourner this; finsi; procédure en O(n) 44

LES METHODES Liste supprimer(elt x) //supprime l'élément x de la liste; //erreur si x n'est pas présent début Liste p = this; //sera la place de x Liste q = this; //sera la place précédant p si p.valeur==x alors q = p.suivant; retourner q; //x est le premier finsi; X x liste p=q liste = liste.supprimer(x) //cas où x est le premier 45

Liste supprimer(elt x) //supprime l'élément x de la liste; //erreur si x n'est pas présent début Liste p = this; Liste q = this; //sera la place de x //sera la place précédant p LES METHODES procédure en O(n) si p.valeur==x alors q = p.suivant; retourner q; finsi; fin tant que p null faire si p.valeur==x alors q.suivant = p.suivant; retourner this; sinon q = p; p = p.suivant; finsi; fait; "erreur"; //élément absent x q p liste = liste.supprimer(x) 46

remarque supprimer ne rend pas les emplacements mémoire au système; il y a un "ramasse-miettes" qui récupère les places libérées. trouver, supprimer, inséreraprès et insérerenqueue en O(n) insérerentête en O(1) concaténation et scission simples 47

2-5 LISTES CONTIGUËS LISTES ORDONNEES 2-5-11 LISTE CONTIGUËS liste taille = 6 3 7 5 8 2 tliste[3] Longueur de la liste: 5 48

Une liste contiguë est un tableau qui contient des éléments (classe Elt). On peut ajouter un élément à n'importe quel endroit si le tableau n'est pas "plein" On peut retirer un élément à n'importe quel endroit si le tableau n'est pas "vide" On peut accéder à tout élément directement à partir de sa place (Indice) dans le tableau 49

accès facile au ième élément: en O(1) insertion (si liste non pleine) et suppression (si liste non vide) plus difficiles : en O(longueur) insertion de 9 3 7 5 8 2 3 7 5 9 8 2 suppression de 7 3 7 5 8 2 3 5 8 2 50

2-5-22 LISTE CONTIGÜES ORDONNEES un élément une clé éléments rangés dans une liste dans l'ordre croissant des clés Classe Elt { entier clé T_elt contenu } 2 3 5 7 8 9 Classe LO //Liste ordonnée; 51

Une liste ordonnée est un tableau qui contient des éléments (classe Elt) classés par ordre croissant de leurs clés. On peut ajouter un élément après un élément de clé inférieure et avant un élément de clé supérieure (ou =) si le tableau n'est pas "plein" On peut retirer un élément à n'importe quel endroit si le tableau n'est pas "vide" On peut accéder à tout élément directement à partir de sa place (Indice) dans le tableau On va définir une classe "LO": "Liste ordonnée" 52

implémentation d'une liste ordonnée classe LO{ entier taille; //constante Elt[ ] tab; entier longueur = 0; LO ( entier t){ this.taille=t; this.tab=new Elt[t]; } // les méthodes } On définit une classe Indice pour les indices du tableau tab (entier entre 0 et taille-1) Dans la suite on omettra d'écrire "this" pour simplifier. 53

recherche dans une liste ordonnée -pour chercher un élément e -pour insérer un nouvel élément e *recherche de l'indice i du premier élément de clé à la clé de e *si tab[i].clé = e.clé, e est dans tab en i (trouvé=vrai) *sinon, e n'est pas dans tab et on peut l'insérer en i (trouvé=faux) EXEMPLE où insérer 4? 0 1 2 3 4 2 3 5 7 9 2 3 4 5 7 9 k=0 tab[0].clé<4, k=1 tab[1].clé <4, k=2 tab[2].clé>4 54

void rech_séq (Elt x, Indice place, Booléan trouvé) // indique vrai et place si l'élément est //présent; la place où l'insérer sinon début Indice i = new Indice (0); int val=x.clé; trouvé = faux; //il s'agit d'abord de la place tant que non trouvé et fait; recherche séquentielle i longueur -1 faire si tab[i].clé val alors place = i; trouvé = vrai; sinon i = i+1 ; finsi; LES METHODES si non trouvé //la liste est vide ou bien //val est > au plus grand élément alors place = longueur; sinon finsi; fin si tab[place].clé val alors trouvé = faux; //élément absent finsi; //si trouvé reste à vrai, //l'élément est présent procédure en O(n) 55

EXEMPLE recherche dichotomique 0 1 2 3 4 2 3 5 7 9 place=0 fin = 4 milieu=2 4<tab[2] fin=2 place=0 milieu=1 0 1 2 2 3 5 4>tab[1] place=2 2 3 4 7 9 4 est inséré en tab[2] 5 void rech_dic (Elt x, Booléan trouvé, Indice place) //renvoie vrai et place si l'élément est présent; //renvoie faux et indique la place où l'insérer sinon 56

début place = 0; trouvé = faux; Indice fin=new Indice (longueur-1); int val=x.clé; si fin -1 alors //sinon, x absent à insérer en place 0 tant que place < fin faire //val est dans le paquet d'au moins 2 //éléments situé entre place et fin; milieu = (place+fin)/2 ; si tab[milieu].clé < val alors //val est dans la partie de droite fait; place = milieu+1 ; sinon //val est à gauche finsi; fin = milieu ; LES METHODES si tab[place].clé== val alors trouvé = vrai; sinon //clé absente; //place sert à l'insérer si place==tab.longueur-1 et tab[place].clé < val //clé > que tous alors place = place+1; //à la fin finsi; finsi; finsi; fin 57

Complexité en O(log n) nombre k de passages dans la boucle: on divise le nombre d'éléments restants par 2 jusqu'à ce qu'il n'en reste qu'un (k divisions) ((((n/2)/2)/2)/../2)=1 soit n/2 k =1 et donc k=log 2 n 58

insertion dans une liste ordonnée tab insertion de e de clé c en tab[i] autorisée seulement si -longueur==0 et i==0 ou //liste vide -0 < longueur == n < taille //liste non pleine et [0 < i n-1 et tab[i-1].clé < c <tab[i].clé //insertion en milieu de liste ou i==n et tab[n-1].clé < c] //insertion en fin de liste Remarque: les deux procédures de recherche précédentes autorisent les "doublons" 59

insertion dans une liste ordonnée tab sans doublons void insérer (Elt x) //insère l'élément x dans la liste si x n'est pas déjà présent booléen trouvé; Indice place; début si longueur==taille alors "erreur" finsi; //liste pleine rech_dic (x.clé,trouvé,place); si trouvé==vrai alors erreur; //élément déjà présent sinon pour i=this.longueur-1 à i=place pas -1 faire tab[i+1]=tab[i] fait; tab[place] = x; longueur=longueur+1; finsi; fin procédure en O(n) 60

liste chaînée - accès par le rang en O(n) - adjonction et suppression en O(1) si on connaît la place; en O(n) sinon - recherche en O(n) 2-7 CONCLUSION liste contiguë - accès par le rang en O(1) - adjonction et suppression en O(n) - listes ordonnées recherche dichotomique en O(log n) file ou pile - liste contiguë particulière efficace mais peu souple 61