LES PILES ET FILES.

Slides:



Advertisements
Présentations similaires
LES NOMBRES PREMIERS ET COMPOSÉS
Advertisements

[number 1-100].
Qualité du Premier Billot. 2 3 Défauts reliés à labattage.
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
Licence pro MPCQ : Cours
Rappels C.
Fonctions & procédures
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Sud Ouest Est Nord Individuel 36 joueurs
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
Algorithme et structure de données
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
Chap. 1 Structures séquentielles : listes linéaires
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
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.
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Récursivité.
Cours d’Algorithmique
Les structures de données arborescentes
Synchronisation et communication entre processus
II. Chaînage, SDD séquentielles
Les algorithmes: complexité et notation asymptotique
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
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Les tris.
INDUSTRIE sa Tel : 0033(0) Fax : Projet: SKIP CAPSULES – v.1 Client: CARDIVAL HEALTH.
LES NOMBRES PREMIERS ET COMPOSÉS
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.
1 INETOP
IFT-10541A : Hiver 2003 Semaine 5 : Piles et files.
RACINES CARREES Définition Développer avec la distributivité Produit 1
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
1.1 LES VECTEURS GÉOMÉTRIQUES
Tournoi de Flyball Bouin-Plumoison 2008 Tournoi de Flyball
Notre calendrier français MARS 2014
COURS DE PROGRAMMATION ORIENTEE OBJET :
C'est pour bientôt.....
Les Nombres 0 – 100 en français.
Veuillez trouver ci-joint
Structures de données IFT-10541
L’essentiel du langage C
Structures des données
Le langage C Structures de données
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Ch. PAUL - Piles et Files à l'aide de listes chainées
CALENDRIER-PLAYBOY 2020.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Notions de pointeurs en C
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
Les Chiffres Prêts?
Médiathèque de Chauffailles du 3 au 28 mars 2009.
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.
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.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Transcription de la présentation:

LES PILES ET FILES

Les Piles et Files Définition Ce sont des structures de données ordonnées, mais qui ne permettent l'accès qu'à une seule donnée. Les piles (stack LIFO : Last In First Out) correspondent à une pile d'assiettes : on prend toujours l'élément supérieur, le dernier empilé. Les files (on dit aussi queues) (stack FIFO: First In First Out) correspondent aux files d'attente : on prend toujours le premier élément, donc le plus ancien. Elles servent à mémoriser des choses en attente de traitement. Elles sont souvent associées à des algorithmes récursifs.

Les Piles et Files Définition Il n'y a pas de structures spécifiques prévues dans les langages, il faut donc les créer. Pour les piles on utilisera : un tableau unidimensionnel (statique ou dynamique) en cas de piles de hauteur maximale prévisible (la hauteur de la pile est mémorisée par une variable entière). une liste en cas de longueur très variable (on a un surcoût en mémoire d'autant de liens (pointeurs) que d'éléments empilés).

Les Piles et Files Définition Pour les files on utilise: un tableau (on nécessite deux variables : la position du premier et celle du dernier). La gestion est alors un peu plus complexe que pour les piles, puisque le suivant de la fin du tableau est le début du tableau. une liste (aussi simple que pour une pile).

Les Piles et Files Fonctions de base Pour les piles sont l'empilage et le dépilage, pour les files l'enfilage et le défilage. Dans les deux cas: on a une fonction d'initialisation, et une fonction indiquant si la pile (file) est vide. Les fonctions de base dépendent de la méthode réelle de mise en oeuvre (tableau, liste,...). On va pouvoir modifier facilement le type d'implantation en mémoire sans réécrire les programmes.

Tableau statique – en cas de piles de hauteur maximale prévisible (la hauteur de la pile est mémorisée par une variable entière). #define MAX_PILE 100 typedef struct { int top; TypeEl tab[MAX_PILE]; } Pile; #define TypeEl float ou ben typedef float TypeEl;

Tableau statique La définition de type Initialisation de la pile #include <stdio.h> 1/4 #define MAX_PILE 20 typedef float TypeEl; typedef struct { TypeEL v[MAX_PILE]; int top; } Stack; void init(Stack *S) S->top = 0; } int full(Stack *S) return (S->top >= MAX_PILE); La définition de type Initialisation de la pile Indication si la pile est pleine

Tableau statique Empiler Dépiler void push(Stack *S, TypeEL val) 2/4 { if(!full(S)) { S->v[ S->top ] = val; /* òu bien: S->v[ (S->top)++ ] = val; */ (S->top)++; } else printf("La pile est pleine\n"); float pop(Stack *S) { (S->top)--; return (S->v[S->top]); /* òu bien : return (S->v[--(S->top)]); */ Empiler Dépiler

Tableau statique Affichage du contenu void MyStackPrint(Stack *S) 3/4 { int i; if (S->top == 0) printf("La pile est vide.\n"); else printf("Le contenu de la pile: "); for (i=S->top;i;i--) printf("%g ",S->v[i-1]); } printf("\n"); Affichage du contenu

Tableau statique La pile est vide Entrer element:11 El. suivant?O/N: Le contenu de la pile: 33 22 11 Popped value is: 33 Le contenu de la pile: 22 11 Le contenu de la pile: 33 Tableau statique void main() 4/4 { Stack S; TypeEl el; init(&S); MyStackPrint(&S); do { printf("\nEntrer element:"); scanf("%f",&el); push(&S, el); printf("El. suivant?O/N:"); } while (toupper(getch())=='O'); printf("Popped value is: %g\n",pop(&S)); push(&S, pop(&S) + pop(&S)); }

l'implantation des fonctions de base est similaire Tableau statique l'implantation des fonctions de base est similaire #include <stdio.h> 1/3 #include <conio.h> #include <ctype.h> #define dim_file 100 #define composante float static composante file[dim_file]; static int bas,sommet,taille; void init_file(void) { bas=sommet=taille=0;} int file_vide(void) { return(taille==0); } static pour empêcher l'accès direct extérieur Initialisation de la file Indication si la file est vide

l'implantation des fonctions de base est similaire Tableau statique l'implantation des fonctions de base est similaire int enfiler(composante x) 2/3 { if(taille<dim_file) { file[sommet]=x; if(sommet < dim_file-1) { sommet++; taille++;return(0); } else { puts("file saturee");return(1); } Enfiler

l'implantation des fonctions de base est similaire Tableau statique l'implantation des fonctions de base est similaire composante defiler(void) 3/3 { composante x; if (taille>0) x=file[bas]; bas++; taille--; return(x); } else {puts("file vide");return(0);} Défiler

Tableau dynamique typedef struct { int top; TypeEl *tab; } Pile; #define TypeEl float

Tableau dynamique La définition de type Initialisation de la pile #include <stdio.h> 1/5 #include <stdlib.h> #include <conio.h> #include <ctype.h> typedef int stack_data; struct stack_rec { stack_data data; struct stack_rec *next; }; struct stack_rec *top=NULL; void stack_init() { top=NULL; } int stack_empty() { if (top==NULL) return(1); else return(0); } La définition de type Initialisation de la pile Indication si la pile est pleine

Tableau dynamique Empiler void stack_push(stack_data d) 2/5 { struct stack_rec *temp; temp = (struct stack_rec *)malloc(sizeof(struct stack_rec)); temp->data=d; temp->next=top; top=temp; }

Tableau dynamique Dépiler stack_data stack_pop() 3/5 { struct stack_rec *temp; stack_data d=0; if (top!=NULL) d=top->data; temp=top; top=top->next; free(temp); } return(d); Dépiler

Tableau dynamique Affichage du contenu Vider une pile void Print() 4/5 { struct stack_rec *temp=top; stack_data d=0; while (temp!=NULL) { d=temp->data; printf("\n%d",d); temp=temp->next; } void stack_clear() stack_data x; while (!stack_empty()) x=stack_pop(); Affichage du contenu Vider une pile

Tableau dynamique entrer element=66 Encore? O/N: entrer element=88 99 88 66 Popped value is:99 Tableau dynamique void main() 5/5 { stack_data el; stack_init(); do { printf("\nentrer el="); scanf("%d",&el); stack_push(el); printf("Encore? O/N"); } while(toupper(getch()) == 'O'); Print(); printf("\nPopped value is: %d\n",stack_pop()); }

Piles: implantation dans une liste chaînée Liste chaînée - en cas de longueur très variable (ne pas oublier que dans ce cas on a un surcoût en mémoire d'autant de liens (pointeurs) que d'éléments empilés).

Les définitions de type #define TypeEl int typedef struct element { TypeEl val; struct element* prec; }elem; typedef struct elem * sommet; } maPile; typedef maPile * Pile; Les définitions de type

Pile empilerPile (Pile p, TypeEl x, int *err) { /* objectif: empiler un élément dans une pile */ /* La pile p est correctement initialisée */ elem * nouveau; if((nouveau =(elem*) malloc(sizeof(elem)))!= NULL) { *err=OK; nouveau->val = x; nouveau->prec = NULL; if (p->sommet !=NULL) { nouveau->prec = p->sommet; p->sommet = nouveau; } else { p->sommet = nouveau; return p; { *err=PAM;

Pile depilerPile(Pile p, int *err) { /* objectif: enlever l'élément au sommet de la pile méthode: détacher et libérer l'élément au sommet hypothèse: la pile est correctement initialisée et non vide */ elem * top; if (p->sommet != NULL) { top = p->sommet; p->sommet = p->sommet->prec; top->prec=NULL; free(top); *err=OK; return p; } *err=PV;

TypeEl sommetPile (Pile p, int *err) { /* objectif: retourner l'élément au sommet de la pile méthode: consultation de l'élément au sommet de la pile hypothèse: la pile est correctement initialisée et non vide */ if(p->sommet!=NULL) { *err=OK; return p->sommet->val ; } else *err=PV; return 0; /* une valeur quelconque*/

BOOL pileVide (Pile p, int *err) { /* objectif: vérifier si la pile est vide méthode: tester le sommet de la pile sortie: VRAI si la pile est vide, FAUX sinon résultat: la pile est inchangée et *err=OK hypothèse: la pile est correctement initialisée */ *err=OK; if(p->sommet == NULL) return VRAI; else return FAUX; }

BOOL appartientPile (Pile p, TypeEl x, int *err) { /* objectif: trouver l'appartenance de x dans une pile sortie: p est inchangée avec *err=OK résultat: VRAI si x appartient à p et FAUX sinon hypothèse: la pile est correctement initialisée */ *err=OK; while(p->sommet != NULL) { if( p->sommet -> val == x ) return VRAI; p->sommet = p->sommet->prec; } return FAUX;

Pile remplacerPile (Pile p, TypeEl x, TypeEl y, int *err) { /* objectif: le premier x trouvé est remplacé par y sortie: la pile mise à jour ou bien la pile non changée hypothèse: la pile est correctement initialisée */ *err=OK; while(p->sommet != NULL) { if( p->sommet -> val == x ) {p->sommet->val = y; return p; } p->sommet = p->sommet->prec;

Piles: Exemples d’application Vérification de parenthèses Évaluation des expressions arithmétiques La notation polonaise - Traduisons en notation polonaise, étape par étape, les expressions suivantes écrites en notation infixée. (A + B) * C = [+AB]*C = *+ABC A + (B * C) = A + [*BC] = +A*BC On traduit d'abord l'expression en notation suffixée On l'évalue par la suite Récursivité Programmation – parcours de graphes