Vous êtes sur la page 1sur 2

Centre CPGE TSI ALKHAWARIZMI 2010/2011

j. BAKKAS

Srie : Piles & Files


Exercice 1 (Calculatrice postxe)
On se propose de raliser une calculatrice valuant les expressions en notation postxe. Lalphabet utilis est le suivant : A = {0, . . . , 9,+,, , /} (loprateur est ici binaire). Pour un oprateur n-aire P et les oprandes O1, . . ., On, lexpression, en notation postxe, associe P sera : O1, . . . ,OnP. Ainsi, la notation postxe de lexpression (2 5) + 6 + (4 2) sera : 2 5 6 + 4 2 +. On suppose que lexpression est valide et que les nombres utiliss dans lexpression sont des entiers compris entre 0 et 9. De plus, lexpression est donne sous forme de chanes de caractres termine par le caractre \0. Par exemple (2 5) + 6 + (4 2) sera donne par la chane 25 6 + 42 +. crire un programme qui value une expression postxe laide dune pile dentiers. Pour cela : Dfinir la structure de pile d'entiers (un pointeur sur une liste chane de valeurs entires). Ecrire la fonction push qui insre un lment en tte de pile. Ecrire la fonction pop qui rcupre (et supprime) l'lment en tte de pile Ecrire la fonction main() qui permet de : o Lire une expression en notation postfixe o Evaluation de lexpression en utilisant les fonctions prcdentes Pour convertir un caractre en entier utiliser la fonction suivante : int ctoi(char c){return (int)(c-0) ;}

Exercice 2
On considre la file illustre par le schma suivant :

Les lments de la file sont dfinis par la structure nomme element compose de deux champs (data et next). Le champ data contient la valeur (ici un float) de llment et le champ next est un pointeur vers llment suivant de la file dattente (ou NULL si cest le dernier lment). 1. Ecrire le type struct element et redfinir ce type en elt. Dfinir le type file comme une structure contenant 3 champs :

nb_elt : de type entier indiquant le nombre dlments dans la file dattente (0 si file vide), tete : de type pointeur sur elt pointant le premier lment de la file (NULL si file vide), queue : de type pointeur sur elt indiquant ladresse du dernier lment de la file (NULL si file vide).

Dans la suite, les prototypes des fonctions cree_file, enfile, defile, affiche et vide : 2. Dfinir une fonction cree_file qui cre une file dattente vide (i.e. nb_elt = 0, front = NULL et back = NULL) et qui renvoie ladresse de cette file vide (un pointeur sur le type file) si la cration est russie et qui renvoie NULL sinon. Le prototype de cree_file sera donc : file * cree_file ( void ); 3. Ecrire une fonction enfile qui ajoute un lment la fin de la file dattente. Cette fonction doit prendre 2 arguments (lesquels ?) et renvoyer un entier : 1 si lajout est russi et 0 sinon. Ecrire une fonction defile qui renvoie la valeur du premier lment de la file dattente avant de le dtruire. 4. En utilisant une boucle while, crire une fonction affiche de prototype void affiche ( file * f); Taille de la file : 4 2 Contenu : 1.5 4 3.14159 2 6 4.78 5. En utilisant une boucle for, crire une fonction vider qui dtruit une file dattente (destruction de tous les lments). 6. Ecrire la fonction principal main() pour tester les fonctions prcdentes 7. Extension : Ecrire une fonction fusion qui fusionne 2 files dattente en respectant les rgles suivantes : la premire des 2 listes passes en argument contiendra la liste fusionne, la fusion se fait en prenant successivement un lment de la liste 1 puis un lment de la liste 2.