Ch. PAUL - Piles et Files à l'aide de listes chainées

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
Advertisements

Chapitre annexe. Récursivité
Rappels C.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 5 Structures de données abstraites.
Structures de données et complexité LIFO – FILO – FIFO – etc…
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
La pile un élément essentiel
C.
Algorithme et structure de données
Chap. 1 Structures séquentielles : listes linéaires
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
ALGORITHMES RECURSIFS
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.
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Cours d’Algorithmique
Types de données et représentation
Les piles Djamal Rebaïne.
Les structures de données arborescentes
II. Chaînage, SDD séquentielles
RECURSIVITE ARBRES BINAIRES
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
TRAITEMENT DE STRUCTURES
Définition d’un maillon de liste
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Les tris.
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
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Présentation Structures de Données et TDA

COURS DE PROGRAMMATION ORIENTEE OBJET :
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Structures de données IFT-10541
Algorithmique et structures de données en C
Exemple de gestion d'un buffer clavier en liste circulaire
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Structures des données
Le langage C Structures de données
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
CALENDRIER-PLAYBOY 2020.
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Université Mohammed V-Agdal École Supérieure de Technologie Salé
Quel est l’intérêt d’utiliser le diagramme de Gantt dans la démarche de projet A partir d’un exemple concret, nous allons pouvoir exploiter plusieurs parties.
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
Structures de données élémentaires dans le contexte du TP #1
Arbres binaires et tables de hachage
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 –
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Structures de données é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.
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.
Piles.
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Transcription de la présentation:

Ch. PAUL - Piles et Files à l'aide de listes chainées PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées INTRODUCTION Les piles et les files sont des objets couramment utilisés en informatique : Le mode de gestion d'une pile est LIFO : Last In First Out Le mode de gestion d'une file est FIFO : First In First Out Exemples : Les appels de fonction dans un programme sont gérés en mode pile, Les travaux d'impression sur un système sont gérés en mode file. Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées APPLICATION Les piles et les files seront introduites sous la forme de liste simplement chainées. Les éléments (Telmt) contiennent un champ suivant (suiv) pour établir le lien avec le maillon suivant. Une structure particulière (Tpile) ou la (Tfile), une par pile ou file permet d'accéder aux éléments. Ch. PAUL - Piles et Files à l'aide de listes chainées

MANIPULATIONS DES PILES Définition Empiler Dépiler Ch. PAUL - Piles et Files à l'aide de listes chainées

FONCTIONNEMENT D'UNE PILE Une pile permet de gérer (stocker et retirer) des objets suivant des modalités particulières : Le dernier élément empilé est le premier dépilé. (Mode Last In First Out) L'analogie la plus courante est la pile d'assiettes. Last In First Out PILE premier Ch. PAUL - Piles et Files à l'aide de listes chainées

OPERATIONS SUR UNE PILE Les fonctions suivantes sont mise en œuvre pour gérer une pile : void initPile(Tpile *P); int empiler(Tpile *P, obj newVal); int depiler(Tpile *P, obj *theVal); int pilevide(Tpile *P); int pilepleine(Tpile *P); Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées ACCES A LA PILE typedef struct { struct elt *premier; } Tpile; La structure Tpile permet l'accès à la pile par son premier élément. le champ "premier" doit être mis à NULL lorsque la pile est vide (initialisation, enlèvement du dernier élément) Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées ANATOMIE D'UN ELEMENT typedef int obj; typedef struct elt { obj val ; struct elt *suiv; } Telt; Les objets gérés par la pile sont ici des entiers, La structure de liste simplement chainées est utilisée. Ch. PAUL - Piles et Files à l'aide de listes chainées

DECLARATION ET INITIALISATION D'UN PILE Tpile PILE; initPile(&PILE); En général la structure Tpile n'est pas allouée dynamiquement. Elle est déclarée en variable dans la fonction main. Elle est passée par adresse à chaque fonction susceptible de modifier le sommet de la pile. Ch. PAUL - Piles et Files à l'aide de listes chainées

INITIALISER ET TESTER LA PILE void initPile(Tpile *P) { P->premier = NULL; } int pilevide(Tpile *P) /* retourne 1 si la pile est vide, 0 sinon*/ { if(P->premier == NULL) return 1; else return 0; } Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées EMPILER int empiler(Tpile *P, obj newVal) { Telt *E; if (pilepleine(P) == 1) { printf("\ntaille max atteinte, pas d'ajout \n"); return 0;} E = (Telt*) malloc(sizeof(Telt)); if (E == NULL) { printf("\nAjout impossible\n"); else { E->val = newVal; E->suiv = P->premier; P->premier = E; return 1;} } Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées DEPILER int depiler(Tpile *P, obj *theVal) { Telt *aSupp; if(pilevide(P)==1) { printf("\nPile vide\n"); return 0; } else { aSupp = P->premier; P->premier=P->premier->suiv; *theVal = aSupp->val; free(aSupp); return 1; } Ch. PAUL - Piles et Files à l'aide de listes chainées

MANIPULATIONS DES FILES Définition Ajouter Retirer Ch. PAUL - Piles et Files à l'aide de listes chainées

FONCTIONNEMENT D'UNE FILE Une file permet de gérer (stocker et retirer) des objets suivant des modalités particulières : Le premier élément ajouté est le premier retiré (mode First In First Out). Nota : on ajoute à la fin, on retire en tête. FILE First In Out premier dernier Ch. PAUL - Piles et Files à l'aide de listes chainées

OPERATIONS SUR UNE FILE Les fonctions suivantes sont mise en œuvre pour gérer une file : void initFile(Tfile *F); int ajouter(Tfile *F, obj newVal); int retirer(Tfile *F, obj *theVal); int filevide(Tfile *F); int filepleine(Tfile *F); Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées ACCES A LA FILE typedef struct { struct elt *premier; struct elt *dernier; } Tfile; La structure Tfile permet de retirer un élément par le champ premier. La structure Tfile permet d'ajouter un élément par le champ dernier. les champs "premier" et "dernier" doivent être mis à NULL lorsque la file est vide (initialisation, enlèvement du dernier élément) Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées ANATOMIE D'UN ELEMENT typedef int obj; typedef struct elt { obj val ; struct elt *suiv; } Telt; On utilise les mêmes éléments que pour les piles. Seule la structure d'accès diffère. Les objets gérés par la file sont ici des entiers, La structure de liste simplement chainée est utilisée. Ch. PAUL - Piles et Files à l'aide de listes chainées

DECLARATION ET INITIALISATION D'UN FILE Tfile FILE; initFile(&FILE); En général la structure Tfile n'est pas allouée dynamiquement. Elle est déclarée en variable dans la fonction main. Elle est passée par adresse chaque fois qu'une fonction est susceptible de la modifier. Ch. PAUL - Piles et Files à l'aide de listes chainées

INITIALISER ET TESTER LA FILE void initFile(Tfile *F) { F->premier = NULL; F->dernier = NULL; } int filevide(Tfile *F) /* retourne 1 si la file est vide, 0 sinon*/ { if (F->premier == NULL) return 1; else return 0; Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées AJOUTER int ajouter(Tfile *F, obj newVal) { Telt *E; if (filepleine(F) ==1) { printf("\ntaille max atteinte, pas d'ajout"); return 0;} E = (Telt*) malloc(sizeof(Telt)); if (E == NULL){ printf("\nAjout impossible"); return 0;} else { E->val = newVal; E->suiv = NULL; if (filevide(F)==1) F->premier = E; else F->dernier->suiv = E; F->dernier = E;return 1; } Ch. PAUL - Piles et Files à l'aide de listes chainées

Ch. PAUL - Piles et Files à l'aide de listes chainées RETIRER int retirer(Tfile *F, obj *theVal) { Telt *aSupp; if(filevide(F)==1) { printf("\nFile vide\n"); return 0;} else { aSupp = F->premier; *theVal = aSupp->val; F->premier= aSupp->suiv; if (F->premier == NULL) F->dernier = NULL; free(aSupp); return 1; } Ch. PAUL - Piles et Files à l'aide de listes chainées

Définition Ajouter Retirer FILES A PRIORITE Définition Ajouter Retirer Ch. PAUL - Piles et Files à l'aide de listes chainées 22

Ch. PAUL - Piles et Files à l'aide de listes chainées FILES A PRIORITE Une file à priorité permet de gérer (stocker et retirer) des objets suivant des modalités particulières, on retire toujours l'élément de plus grande priorité. Le pointeur dernier n'est plus nécessaire. On ajoute par ordre décroissant et on retire le premier élément, On ajoute en tête et on retire en recherchant le plus grand élément (plus compliqué à gérer). 10 8 6 3 FILE A PRIORITE premier Ch. PAUL - Piles et Files à l'aide de listes chainées 23

Ch. PAUL - Piles et Files à l'aide de listes chainées ANATOMIE D'UN ELEMENT typedef int obj; typedef struct eltpri { int priorite; obj val; struct eltpri *suiv; } Teltpri; On rajoute un champ priorite représentant la priorité de l'élément. La structure de liste reste une liste simplement chainée. Ch. PAUL - Piles et Files à l'aide de listes chainées 24

ACCES A LA FILE AVEC PRIORITE typedef struct { int prioritemax;/*facultatif : initialisé à 0*/ struct eltpri *premier; } Tfilepri; Si la file est ordonnée prioritemax est mis à jour : à chaque ajout par simple comparaison avec la priorité de l'élément inséré. à chaque retrait en allant chercher la priorité du nouveau premier. Si la file n'est pas ordonnée, lors du retrait il faut terminer le parcours de la liste et chercher le nouveau plus grand. Ch. PAUL - Piles et Files à l'aide de listes chainées 25

Ch. PAUL - Piles et Files à l'aide de listes chainées FIN DE PRESENTATION Ch. PAUL - Piles et Files à l'aide de listes chainées 26