Structures de données linéaires

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

Tris.
Chap. 4 Recherche en Table
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 5 Structures de données abstraites.
Piles, files et listes: notions théoriques
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
Types de données abstraites
(Classes prédéfinies – API Java)
Algorithme et structure de données
Les structures de données
INTRODUCTION.
Chap. 1 Structures séquentielles : listes linéaires
8. Les tableaux P. Costamagna – ISEN N1.
Algorithmique et Structures de données
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Algo-Prog en Ada TD1 2 MIC Romaric GUILLERM
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.
Chapitre V. Tables de hachage
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.
Les piles Djamal Rebaïne.
Les structures de données arborescentes
II. Chaînage, SDD séquentielles
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
Points importants de la semaine Le paramétrage. La portée. Le passage par copie. Le passage par référence.
II. Chaînage, SDD séquentielles
Programmation fonctionnelle Le langage LISP
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
FICHIERS : Définition : Algorithme général:
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.
IFT-10541A : Hiver 2003 Semaine 5 : Piles et files.
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.
Présentation Structures de Données et TDA
Les listes chaînées par Frédérick Henri.

Standard Template Library
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
1 Le fichier séquentiel Suite finie déléments dun même type Exemples : – fichier des livres dune bibliothèque – enregistrements sur un magnétophone – ensemble.
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.
Le langage C Structures de données
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Université Mohammed V-Agdal École Supérieure de Technologie Salé
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
II. Chaînage, SDD séquentielles
ETNA – 1ème année Guillaume Belmas –
Structures simples et tableaux Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours LCS N°4 Présenté par Mr: LALLALI
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
Structures de données avancées : Principales structures de fichiers
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Algorithmique Tableaux de données
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.
Objets et Actions Élémentaires.
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.
LES TABLEAUX Définition: Création d’un tableau:
Raison d'être de la structure de fichiers : Les premiers travaux : Début des années 1960 : En 1963 : Près de 10 ans plus tard... (à peu près 1973) : Durant.
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
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.
Transcription de la présentation:

Structures de données linéaires Chapitre 03 Structures de données linéaires

Plan 1 - Liste 2 - File 3 - Pile

Liste linéaire Une liste linéaire est la forme la plus courante d'organisation des données. On l'utilise pour stocker des données de même type qui doivent être traitées de manière séquentielle. La structure doit également être évolutive, c'est a dire que l'on doit pouvoir ajouter et supprimer des éléments.

Liste linéaire (Structure logique) Définition: Une liste est une suite finie (éventuellement vide) d'éléments de même type repérés selon leur rang dans la liste. Remarques: L'ordre des éléments est fondamental. Mais attention, il ne s'agit pas d'un ordre sur les valeurs des éléments mais d'un ordre sur les places dans la liste. Chaque élément est rangé à une certaine position. Il ne faut pas confondre le rang et la position !

Liste linéaire (Structure logique) Au niveau logique, on appelle une liste linéaire, la représentation d’un ensemble fini et ordonné d’éléments de type T. elle peut être dénotée par la simple énumération de ses éléments: L=(e1,e2,…., en) Le nombre des éléments n’est pas connu nécessairement au préalable et éventuellement variable.

Liste linéaire (Structure logique) Elle est entièrement déterminée par la connaissance de sa première place, i.e. celle de son premier élément appelé tête de la liste.

Liste linéaire (Structure fonctionnelle) Pour la manipulation des listes, on peut définir les primitives et fonctions suivantes : Créer_liste() : création d'une liste vide Position_debut(liste L) : retourne la position du premier élément de la liste, INCONNUE si la liste est vide Position_n(liste L) : retourne la position du dernier élément de la liste, INCONNUE si la liste est vide Position_suivante(position p, liste L) : retourne la position de l'élément qui suit celui en position p, INCONNUE si on sort de la liste Position_precedente(position p, liste L) : retourne la position de l'élément qui précède celui en position p, INCONNUE si on sort de la liste

Liste linéaire (Structure fonctionnelle) Element_acces(position p,liste L) : retourne l'élément en position p Longueur(liste L) : retourne le nombre d'éléments contenus dans la liste Insérer (élément e, rang r, liste L) : rajoute l'élément dans la liste (qui est donc modifiée) au rang r Supprimer(rang r, liste L) : supprime l'élément de rang r dans la liste (qui est donc modifiée) Liste_est_vide(liste L) : teste si la liste est vide, retourne VRAI ou FAUX Element_ieme(rang r, liste L) : retourne l'élément de rang r Ajouter(élément e, position p, liste L) : ajoute l'élément e dans la liste (qui est donc modifiée) après celui en position p Enlever(position p, liste L) : supprime l'élément de position p dans la liste (qui est donc modifiée).

Liste linéaire (Implémentation) a. Implémentation contiguë: Les éléments sont rangés les uns à côté des autres, dans un tableau. La ième case du tableau contient le ième élément de la liste. Le rang est égale à la position (des entiers tout simplement) !

Liste linéaire (Implémentation contiguë) Remarques: l’inconvénient, d’une telle représentation, réside dans la suppression et l’insertion d’éléments qui nécessitent des décalages dans le tableau! L’insertion d’éléments à la liste (dans le tableau) peut provoquer un sur-débordement.

Liste linéaire (Implémentation) b. Implémentation chaînée: Dans ce cas on parle de liste chaînée. Cette représentation permet d’éviter les inconvénients de la représentation contiguë.

Liste linéaire (Implémentation chaînée) Les éléments ne sont pas rangés les uns à côté des autres. On a besoin de connaître, pour chaque élément, la position (l'adresse) de l'élément qui le suit. La position n'a donc plus rien à voir avec le rang, mais c'est l'adresse d'une structure qui contient l'élément ainsi que la position du suivant .

Liste linéaire (Implémentation chaînée) Tête Elément Suivant NIL

Liste linéaire (Implémentation chaînée) Chaque élément de la liste chaînée est représenté par un doublet contenant: La valeur de l’élément Et l’adresse (pointeur ou position) de l’élément suivant.

Liste linéaire (Implémentation chaînée) Remarque: dans une liste chaînée, l’accès à un élément est une opération plus longue par rapport à l’implémentation contiguë, car on effectue un parcours effectif (élément par élément) de la liste.

Variable dynamique (pointeurs) un lien (adresse) est stocké dans une case mémoire particulière : appelée pointeur Un pointeur est une variable qui contient l’adresse (l’endroit où est rangé en mémoire) d’une autre variable dynamique.

Variable dynamique (pointeurs) Une variable dynamique est repérée par un pointeur. Le pointeur est une variable dont la valeur est l’adresse de la variable dynamique. Un pointeur pointe sur une case (variable dynamique) ayant un type précis. Un pointeur peut contenir « NIL », dans ce cas il ne repère aucune variable dynamique. On dit qu’une variable P de type pointeur repère une variable dynamique la valeur de P<> NIL et est égale à l’adresse de cette variable dynamique. Pointeur ^type Variable dynamique (type)

Variable dynamique (pointeurs) Les variables dynamique ne sont pas déclarées dans un programme, seul les pointeurs sur leurs types qui doivent être définis. Une variable dynamique de type T repérée par un pointeur P est crée par l’appel de la primitive prédéfinie NEW(P). Une variable dynamique repérée par un pointeur P peut être supprimer à l’aide de la primitive prédéfinie DISPOSE(P).

Variable dynamique (pointeurs) Exemple: Début q,p:^Entier; New(p); Lire(^p); q:=p; q^:=2*q^; Ecrire(q^); Dispose(p); Fin.

Déclaration d’une liste chaînée Les variables dynamiques sont utilisées pour représenter les éléments d’une liste chaînée. Et comme chaque élément d’une liste chaînée est représenté par un doublet, on utilise alors la structure d’enregistrement comme suit: TYPE Pointeur = ^Elément; Elément = Enregistrement Valeur : <type>; Suivant : Pointeur; Fin;

Exemple Pour définir une liste de nombres réels: TYPE Pointeur = ^Elément; Elément = Enregistrement Valeur : Réel; Suivant : Pointeur; Fin; VAR L, P: Pointeur;

Application sur les listes Construction de liste (Fifo et Lifo) Insertion et suppression dans une liste Listes Bidirectionnelles Listes circulaires

La structure de FILE (Structure logique) Définition: Une FILE est un cas particulier de liste pour laquelle on ne peut ajouter de nouvel élément qu’à la fin de la file et on ne peut extraire un élément qu’en tête de file. D’où l’appellation FIFO (First In, First Out).

File (Structure fonctionnelle) Les primitives suivantes sont utilisées pour la manipulation d’une File: Filevide : fonction booléenne = vrai si la file est vide et faux sinon Enfiler : Procédure d’ajout d’un élément à la queue de la file, Défiler : Procédure permettant de supprimer l’élément qui se trouve en tête de file, Filepleine: fonction booléenne = vrai si la file est pleine; càd l’ajout d’un élément provoque un sur-débordement et faux sinon. Initialisation : Initialise une file à vide.

File (Implémentation) Représentation contiguë: Une file peut être représentée par un vecteur: 1 TailleMax ↓ ↑ tête F Queue

File (Implémentation) Représentation contiguë: File est vide si tête>queue Enfiler(F,X): queue:= queue +1; F[queue]:=x; Défiler(F,x): x:=F[tête]; tête :=tête+1 File est pleine si queue=taillemax. Initialiser File : Tête:=1; queue:=0;

File (Implémentation) Fonction FileVide(Entrée Tête,Queue:Entier):Booléen; Début FileVide:=(Tête>queue); Fin; Procédure Enfiler(Entrée/Sortie F:file; Entrée x:<type>); queue:=queue+1; F[queue]:=x;

File (Implémentation) 2. Représentation chaînée: Une liste linéaire Fifo peut être considérée comme une file. Elément Suivant NIL Tête Queue

File (Implémentation) Représentation chaînée: File est vide := (tête=Nil) Enfiler(F,X): Exercice… Défiler(F,x): Exercice… File est pleine: Dépend du système Initialiser File : Tête:=Nil; queue:=Nil;

File (Application) Rechercher le maximum des éléments d’une file de nombres réels donnée. Supprimer les éléments négatifs d’une file de nombres réels donnée.

Structure de Pile (Structure logique) Définition: Une Pile est considérée comme un ensemble, éventuellement variable de données, de même type, structuré en un sommet et un corps. Le sommet de la pile est un élément particulier; c’est le seul point d’entrer dans la pile.  Sommet …………… Corps Base

Structure de Pile (Structure logique) Une PILE est donc un autre cas particulier de liste pour laquelle on n’accède qu’à un seul élément : le dernier (appelé Sommet), d’où l’appellation LIFO (Last In, First Out). Caractéristiques d’une Pile: Principe de construction Lifo; Seul le sommet de pile (dernier élément entré) est visible; Les informations sont conservées temporairement; lors du lancement du pgme, la pile est supposée vide, et à la fin du traitement celle-ci doit être également vide, et bien sûr durant le traitement la pile diminue et augmente de taille.

Pile (Structure fonctionnelle) Les primitives suivantes sont définies pour la gestion d’une Pile: Pilevide : fonction booléenne = vrai si la Pile est vide et faux sinon Empiler (Push): Procédure d’ajout d’un élément au sommet de pile, Dépiler (Pop): Procédure permettant de récupérer la valeur et supprimer l’élément qui se trouve en sommet de pile, Pilepleine: fonction booléenne = vrai si la Pile est pleine; càd l’ajout d’un élément provoque un sur-débordement et faux sinon. InitPile : Initialise une Pile à vide. Sommetpile : permet de consulter la valeur du sommet de pile (ne change pas l’état de la pile)

Pile (Implémentation) Représentation contiguë: La pile peut être représenter à l’aide d’un vecteur, le nombre maximum d’éléments constitue la taille de la pile. Le sommet de la pile correspond à l’indice courant et la base correspond à l’indice 1.

Pile (Implémentation) Représentation contiguë  TailleMax Sommet 1 ( base )

Pile (Implémentation) Exercice: Donner les différentes primitives de manipulation de pile pour la représentation contiguë.

Pile (Implémentation) 2. Représentation Chaînée: Une liste linéaire Lifo peut être considérée comme une Pile. Valeur Suivant Sommet Valeur Suivant Valeur Suivant Base

Pile (Implémentation) Représentation Chaînée Pile est vide := (Sommet=Nil) Empiler(P,X): Exercice… Dépiler(P,x): Exercice… Pile est pleine: Dépend du système InitPile : Sommet:=Nil; Base:=Nil;

Pile (Application) Trier une Pile de nombres réels. On dispose d’une pile de nombres réels ordonnés selon l’ordre décroissant des valeurs, i.e que le maximum se trouve au sommet de pile. Donner la procédure qui permet de rechercher dans cette pile une valeur x, et l’insert à sa place qu’il faut si elle est inexistante.