Cours Structures de donn©es

  • View
    26

  • Download
    1

Embed Size (px)

DESCRIPTION

Cours Structures de données. Types Abstraits de Données Piles, Files & Listes. Objectifs. Introduire la Notion de Type Abstrait de Données (TAD) Spécification Implémentation Etudier les structures linéaires classiques Piles Files Listes. Types Abstraits de Données (TADs). - PowerPoint PPT Presentation

Text of Cours Structures de donn©es

  • CoursStructures de donnesTypes Abstraits de DonnesPiles, Files & Listes

  • ObjectifsIntroduire la Notion de Type Abstrait de Donnes (TAD)SpcificationImplmentation

    Etudier les structures linaires classiques PilesFilesListes

  • Types Abstraits de Donnes (TADs)Spcification & Implmentation

  • Notion de Type Abstrait de Donnes (TAD)

    La conception dun algorithme est indpendante de toute implantation

    La reprsentation des donnes n'est pas fixe ; celles-ci sont considres de manire abstraite

    On sintresse lensemble des oprations sur les donnes, et aux proprits des oprations, sans dire comment ces oprations sont ralises

    On parle de Type Abstrait de Donnes (TAD)

  • Dfinition dun TADUn TAD (Data Abstract Type) est un ensemble de valeurs muni doprations sur ces valeurs, sans faire rfrence une implmentation particulire.

    Exemples :

    Dans un algorithme qui manipule des entiers, on sintresse, non pas la reprsentation des entiers, mais aux oprations dfinies sur les entiers : +, -, *, /

    Type boolen, ensemble de deux valeurs (faux, vrai) muni des oprations : non, et, ou

    Un TAD est caractris par :

    sa signature : dfinit la syntaxe du type et des oprations ;sa smantique : dfinit les proprits des oprations.

  • Signature dun TADComporte :Le nom du TAD ;Les noms des types des objets utiliss par le TAD ;Pour chaque opration, lnonc des types des objets quelle reoit et quelle renvoie.

    Dcrite par les paragraphes :TypeUtiliseOprations

  • Signature dun TADExemple : TAD Boolen

    Type BoolenOprationsvrai: Boolenfaux: Boolennon: Boolen Boolenet: Boolen x Boolen Boolenou: Boolen x Boolen Boolen

    Nom du TADNom de l'oprationDeux arguments de type BoolenType valeur de retour

  • Smantique dun TADPrcise :Les domaines de dfinition (ou dapplication) des oprations ;Les proprits des oprations.

    Dcrite par les paragraphes :PrconditionsAxiomes

    On parle dun Type Abstrait Algbrique (TAA) lorsque la smantique est dfinie par un systme dquations

  • Exemple 1 de TAD(TAD Boolen)Type BoolenOprationsvrai: Boolenfaux: Boolennon: Boolen Boolenet: Boolen Boolen Boolenou: Boolen Boolen BoolenPrconditions

    AxiomesSoit, a, b: Boolennon(vrai) = fauxnon(non(a)) = avrai et a = afaux et a = fauxa ou b = non(non(a) et non(b))Aucune prcondition

  • Exemple 2 de TAD(TAD Vecteur)Type VecteurUtilise Entier, Elment Oprations vect: Entier Vecteurchanger_ime: Vecteur x Entier x Elment Vecteurime: Vecteur x Entier Elmenttaille: Vecteur EntierPrconditions vect(i) est_dfini_ssi i 0ime(v,i) est_dfini_ssi 0 i < taille(v)changer_ime(v,i,e) est_dfini_ssi 0 i < taille(v) AxiomesSoit, i, j : Entier, e: Elment, v: Vecteursi 0 i < taille(v) alors ime(changer_ime(v,i,e),i) = esi 0 i < taille(v) et 0 j < taille(v) et i j alors ime(changer_ime(v,i,e),j) = ime(v,j)taille(vect(i)) = itaille(changer_ime(v,i,e)) = taille(v)

  • OprateursTrois catgories d'oprateurs (ou de primitives) :

    Constructeurs : type spcifi apparat, uniquement, comme rsultat ;

    Observateurs : type spcifi apparat, uniquement, comme argument ;

    Transformateurs : type spcifi apparat, la fois, comme argument et comme rsultat ;

    Constante : oprateur sans argument

  • Oprations Partielles

    Une opration peut ne pas tre dfinie partout

    Cela dpend de son domaine de dfinition

    Ceci est trait dans le paragraphe Prconditions

    Exemple : Oprations ime et changer_ime du TAD Vecteur

  • Rutilisation des TADs

    Quand on dfinit un type, on peut rutiliser des types dj dfinis

    La signature du type dfini est l'union des signatures des types utiliss enrichie des nouvelles oprations

    Le type hrite des proprits des types qui le constituent

    Exemples :Types Entier et Elment utiliss par le TAD Vecteur

  • Choix des AxiomesLe systme d'axiomes doit tre :

    non contradictoire (consistance) : le rsultat de chaque observateur est-il unique ?

    complet (compltude suffisante) : Peut-on dduire des axiomes le rsultat de chaque observateur sur son domaine de dfinition ?

  • Notion de Structure de DonnesOn dit aussi structure de donnes concrte

    Correspond limplmentation dun TAD

    Compose dun algorithme pour chaque opration, plus ventuellement des donnes spcifiques la structure pour sa gestion

    Un mme TAD peut donner lieu plusieurs structures de donnes, avec des performances diffrentes

  • Implmentation dun TADPour implmenter un TAD :Dclarer la structure de donnes retenue pour reprsenter le TAD : Linterface Dfinir les oprations primitives dans un langage particulier : La ralisation

    Exigences :Conforme la spcification du TAD ;Efficace en terme de complexit dalgorithme.

    Pour implmenter, on utilise :Les types lmentaires (entiers, caractres, ...)Les pointeurs ;Les tableaux et les enregistrements ;Les types prdfinis.

    Plusieurs implmentations possibles pour un mme TAD

  • Implmentation dun TAD en CUtiliser la programmation modulaire (voir TPs) :Programme dcoup en plusieurs fichiers, mme de petites tailles (rutilisabilit, lisibilit, etc.)Chaque composante logique (un module) regroupe les fonctions et types autour d'un mme thme.

    Pour chaque module truc, crer deux fichiers : fichier truc.h : l'interface (la partie publique) ; contient la spcification de la structure ;fichier truc.c : la dfinition (la partie prive) ; contient la ralisation des oprations fournies par la structure. Il contient au dbut l'inclusion du fichier truc.h

    Tout module ou programme principal qui a besoin d'utiliser les fonctions du module truc, devra juste inclure le truc.h

    Un module C implmente un TAD :L'encapsulation : dtails d'implmentation cachs ; l'interface est la partie visible un utilisateurLa rutilisation : placer les deux fichiers du module dans le rpertoire o l'on dveloppe l'application.

  • Implmentation dun TADExemple : TAD Boolen/* fichier Booleen.h */

    #ifndef _BOOLEEN#define _BOOLEEN

    typedef enum (faux,vrai) Booleen;

    Booleen et(Booleen x, Booleen y); Booleen ou(Booleen x, Booleen y); Booleen non(Booleen x) ;

    #endif/* fichier Booleen.c */

    #include "Booleen.h"

    Booleen et(Booleen x, Booleen y) { if (x == faux) return faux; else return y;}

    Booleen ou(Booleen x, Booleen y) { if (x == vrai) return vrai; else return y;}

    Booleen non(Booleen x) { if (x == vrai) return faux; else return vrai;}L'interface (partie publique)La dfinition (partie prive)

  • Structures de Donnes LinairesPiles, Files & listes

  • Objectifs

    tude des structures de donnes linaires : piles, files et listes

    Une structure linaire est un arrangement linaire d'lments lis par la relation successeurExemple : Un tableau (la relation successeur est implicite).

    Pour chaque structure, on prsente :une dfinition abstraite ;les diffrentes reprsentations en mmoire ; une implmentation en langage C ; quelques applications.

  • Les Piles (Stacks)

  • Notion de Pile (Stack)Les piles sont trs utilises en informatique

    Notion intuitive :pile d'assiettes, pile de dossiers traiter,

    Une pile est une structure linaire permettant de stocker et de restaurer des donnes selon un ordre LIFO (Last In, First Out ou dernier entr, premier sorti)

    Dans une pile :Les insertions (empilements) et les suppressions (dpilements) sont restreintes une extrmit appele sommet de la pile.

  • Exemple de PileEmpiler BEmpiler AEmpiler EEmpiler CEmpiler DDpiler D

    sommet

    D

    sommet

    C

    C

    sommet

    C

    sommet

    E

    E

    E

    E

    sommet

    A

    A

    A

    A

    A

    sommet

    B

    B

    B

    B

    B

    B

  • Exemple de Pile (1)Ajouter dans cet ordre AEBDFCABCDEFPile

  • Exemple de Pile (2)ABCDEFPile

  • Type Abstrait Pile Type PileUtilise Elment, BoolenOprationspile_vide: Pileest_vide: Pile Boolenempiler: Pile x Elment Piledpiler: Pile Pilesommet: Pile ElmentPrconditionsdpiler(p) est-dfini-ssi est_vide(p) = fauxsommet(p) est-dfini-ssi est_vide(p) = fauxAxiomes Soit, e: Element, p: Pileest_vide(pile_vide) = vraiest_vide(empiler(p,e)) = fauxdpiler(empiler(p,e)) = p sommet(empiler(p,e)) = e

  • Oprations sur une Pilepile_vide : Pileopration d'initialisation ; la pile cre est vide

    est_vide : Pile Boolenteste si pile vide ou non

    sommet : Pile Elmentpermet de consulter l'lment situ au sommet ; n'a pas de sens si pile vide

    empiler : Pile x Elment Pileajoute un lment dans la pile

    dpiler : Pile Pileenlve l'lment situ au sommet de la pile ; n'a pas de sens si pile vide

  • Reprsentation d'une PileReprsentation contigu (par tableau) :Les lments de la pile sont rangs dans un tableauUn entier reprsente la position du sommet de la pile

    Reprsentation chane (par pointeurs) :Les lments de la pile sont chans entre euxUn pointeur sur le premier lment dsigne la pile et reprsente le sommet de cette pile Une pile vide est reprsente par le pointeur NULL

  • Pile Contigu3sommetelementsPile/* Pile contigu en C */

    // taille maximale pile#define MAX_PILE 7

    // type des lmentstypedef int Element;

    // type Piletypedef struct { Element elements[MAX_PILE]; int sommet; } Pile;

    Tableau de taille maximale 7

  • Spcification d'une Pile Contigu/* fichier "Tpile.h" */#ifndef _PILE_TABLEAU#define _PILE_TABLEAU

    #include "Booleen.h"

    // Dfinition du type Pile (implmente par un tableau) #define MAX_PILE 7 /* taille maximale d'une pile */typedef int Element; /* les lments sont des int */

    typedef struct { Element elements[MAX_PILE]; /* les lmen