PARTIE VI : PILE ET FILE D ATTENTE EN LANGAGE C

Documents pareils
Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Chap III : Les tableaux

Génie Logiciel avec Ada. 4 février 2013

Les structures de données. Rajae El Ouazzani

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Bases de programmation. Cours 5. Structurer les données

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Java Licence Professionnelle CISII,

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmique, Structures de données et langage C

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Conventions d écriture et outils de mise au point

Les arbres binaires de recherche

Programme Compte bancaire (code)

Les structures. Chapitre 3

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Le prototype de la fonction main()

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Cours d initiation à la programmation en C++ Johann Cuenin

Evaluation et mise en place d un serveur de messages pour Chamilo 2.0

OS Réseaux et Programmation Système - C5

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Assurance Qualité. Cours de génie logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 23/04/2007

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan


Introduction à la programmation concurrente

Travaux Dirigés n 1 : chaînes de caractères

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Cours 6 : Tubes anonymes et nommés

I. Introduction aux fonctions : les fonctions standards

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Les processus légers : threads. Système L3, /31

Architecture des ordinateurs

Chapitre 1 : La gestion dynamique de la mémoire

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Compression de Données - Algorithme de Huffman Document de Conception

INITIATION A LA PROGRAMMATION

Programmation C++ (débutant)/instructions for, while et do...while

Objets et Programmation. origine des langages orientés-objet

TP2 : tableaux dynamiques et listes chaînées

Package Java.util Classe générique

Introduction au langage C

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Exercices INF5171 : série #3 (Automne 2012)

Architecture des ordinateurs

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Algorithmique et Programmation, IMA

Corrigés des premiers exercices sur les classes

Cours de Systèmes d Exploitation

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Utilisation d objets : String et ArrayList

3IS - Système d'exploitation linux - Programmation système

SUPPORT DE COURS. Langage C

Corrigé des exercices sur les références

4. Groupement d objets

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Projet de programmation (IK3) : TP n 1 Correction

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Structure d un programme

et Programmation Objet

Programmation en langage C

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Programmer en JAVA. par Tama

Problèmes liés à la concurrence

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Représentation d un entier en base b

Programmation système de commandes en C

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

ACTIVITÉ DE PROGRAMMATION

COMPARAISONDESLANGAGESC, C++, JAVA ET

Traduction des Langages : Le Compilateur Micro Java

Analyse de sécurité de logiciels système par typage statique

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

as Architecture des Systèmes d Information

Cours de Programmation 2

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Plan du cours. Historique du langage Nouveautés de Java 7

TD3: tableaux avancées, première classe et chaînes

1.6- Génération de nombres aléatoires

Claude Delannoy. 3 e édition C++

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Transcription:

PARTIE VI : PILE ET FILE D ATTENTE EN LANGAGE C Les piles et les files d attente sont des structures de données qu on peut étudiées sous forme d un tableau : piles ou files d attente statiques ou sous forme d une liste chaînée : piles ou files d attente dynamiques. (Voir cours). La structure de données Pile suit la politique de gestion FILO (First In Last Out) et la structure de données File d attente la politique de gestion FIFO (First In First Out). Essayons d implémenter une pile P statique. Elle est représentée par un tableau Tab plus un indice de parcours qu on appellera sommet. /* Implémentation*/ #define Maxpile 10 /*On suppose que la pile contient 10 éléments de 0 à 9*/ Typedef struct pile pile ; Struct pile int sommet; Item Tab[Maxpile]; /* item est un type à préciser*/ ; Pile P; Après avoir implémenté la pile P, on va devoir écrire quelques opérations de base. Dans ce qui va être écrit, on a convenu que pour dire oui cela équivaut à 1 et non est équivaut à 0, ou le contraire c est à vous de choisir! OPERATIONS DE BASE 1. Initialiser une pile. Void InitialiserPile(pile *P) P.sommet = -1 ; /* C est une convention*/ 1

2. Fonction pour dire qu une pile est vide ou pas. Int PileVide(pile P) If P.sommet = = -1 Return 1; Return 0; 3. Fonction pour dire qu une pile est pleine ou pas. Int PilePleine(pile P) If P.sommet = = Maxpile-1 Return 1; Return 0 ; 4. Procédure pour empiler une valeur à la pile P (ajout ou Push). Void Push(Pile *P, item valeur) If PilePleine(P) = = 1 Printf( Erreur: Pile pleine! ); Else P.sommet = P.sommet + 1; P.Tab[P.sommet] = valeur; 2

5. Procédure pour Dépiler une valeur de la pile P (Suppression ou Pop). Void Pop(Pile *P, item *valeur) If PileVide(P) = = 1 Printf( Erreur : Pile vide!) ; Else Valeur = P.Tab[P.sommet] ; P.sommet = P.sommet -1 ; Essayons maintenant d implémenter une pile dynamique sous forme d une liste chaînée. /* Implémentation*/ #include <stdlib.h> Typedef struct Pile Item info ; /*item un type à définir*/ Struct Pile *suiv ; /*Autres littératures utilisent prec au lieu */ Pile ; /*de suiv tout dépend de l angle de vue!*/ Pile *P = NULL ; OPERATIONS DE BASE Une structure de donnée dynamique n est jamais pleine donc notre pile P l est aussi! On utilise Spile comme le nom donné au paramètre formel, on aurait pu l appeler P simplement. De toute façon c est nous qui choisissons les noms! I. Fonction pile vide. Int PileVide(Pile *Spile) /*paramètre formel appelé Spile pour Sommet de P*/ If Spile == NULL Return 1 ; Return 0 ; 3

II. Procédure empiler (Push). Void Push(Pile **Spile, item valeur) Pile *nouveausommet = malloc(sizeof *nouveausommet); If nouveausommet == NULL /*vérifier s il est créé*/ nouveausommet->info = valeur ; nouveausommet->suiv = *Spile ; *Spile = nouveausommet ; /* Il est prudent de vérifier la création du nouveau sommet mais pas nécessaire!*/ III. Fonction dépiler (Pop). Item Pop(Pile **Spile) Item res ; If VidePile(Spile) = = 0 /* Non elle n est pas vide*/ Pile *Pt = (*Spile)->suiv ; Res = (*Spile)->info ; Free(*Spile), *Spile= NULL ; *Spile = Pt; return res ; NB : Il est plus judicieux d utiliser une procédure pour afficher un message d erreur en cas où la pile est vide car on se demande que vat-elle retourner cette fonction dans le cas où la pile est vide! 4

IV. Procédure dépiler (Pop). Void Pop(Pile **Spile, item *valeur) If VidePile(Spile) = = 1 Printf( Erreur : Pile vide! ); else Pile *Pt = (*Spile)->suiv ; Valeur = (*Spile)->info ; Free(*Spile), *Spile= NULL ; *Spile = Pt; Après avoir étudié les piles du point de vue statique et dynamique, ferons de même avec les files d attente. Une file d attente statique est représentée par un tableau circulaire Tab et ses deux indices de parcours tete et queue, un pour indiquer la tête de la file et l autre pour indiquer la queue de la file. Quant à la file d attente dynamique, elle est représentée sous forme d une liste chaînée avec sa politique de gestion particulière. 5

/*Implémentation d une file d attente F statique*/ #define Maxfile 10 Typedef struct fila fila ; /* on suppose qu il y ait 10 éléments*/ /*fila pour ne pas confondre avec le mot clé FILE Fichier*/ Struct fila /* quoique FILE est écrit en majuscule */ Int tete ; Int queue ; Item Tab[Maxfile] ; /* item type à définir*/ ; fila F ; QUELQUES OPERATIONS DE BASE A. Procédure d initialisation de la file d attente. Void InitialiserFile(fila *F) F.tete = 0 ; F.queue = -1 ; /*C est une convention*/ B. Fonction pour vérifier si la file d attente est vide. Int VideFile(fila F) If ((F.tete = = 0) && (F.queue = = -1)) Return 1; Return 0; 6

C. Fonction pour vérifier si la file d attente est pleine. Int pleinevide(fila F) If (((F.tete == 0) && (F.queue == Maxfile-1)) ((F.tete == F.queue+1) && (F.queue!= -1))) Return 1 ; Return 0 ; D. Procédure pour enfiler une valeur à la file d attente (Enqueue). Void EnqueueFile(fila *F, item valeur) If FilePleine(F) == 1 Printf( Erreur : file d attente pleine! ) ; Else F.Queue = (F.Queue+1) % Maxfile ; F.Tab[F.queue] = valeur ; 7

E. Procédure pour défiler une valeur de la file d attente (Dequeue). void dequeuefile(fila *F, item *valeur) If FileVide(F) == 1 Printf( Erreur : File d attente vide! ) ; Else Valeur = F.Tab[F.tete] ; If F.tete == F.queue /* cela veut dire que la file contient un elem*/ F.tete = 0 ; /* donc elle devient vide*/ F.queue = -1 ; else /* La file contient plus d un élément*/ F.Tete = (F.Tete+1) % Maxfile; Sans tarder, on va étudier les files d attente dynamiques sous forme de listes chaînées. 8

/*Implémentation d une file d attente F*/ #include <stdlib.h> Typedef struct fila Item info ; Struct fila *suiv ; fila; Fila *F = NULL ; NB : On remarque que c est pratiquement la même implémentation qu une pile et c est leur politique de gestion qui fait la différence. i. Fonction pour défiler une valeur de la file d attente (En tête de file). Item DequeueFile(fila **T_file) /* T_file comme tête de file*/ Item res ; If (*T_file!= NULL) /* la file d attente n est pas vide*/ Fila *tete = (*T_file)->suiv ; res = (*T_file)->info ; free(*t_file), *T_file = NULL ; *T_file = tete ; Return res ; 9

Remarque : Il est plus judicieux d utiliser une procédure pour régler le problème de la file d attente vide! ii. Procédure pour défiler une valeur de la file d attente. Void DequeueFile(fila **T_file, item *valeur) ; If (*T_file = = NULL) Printf( Erreur : File d attente vide! ) ; Else Fila *tete = (*T_file)->suiv ; Valeur = (*T_file)->info ; Free(*T_file), *T_file = NULL ; *T_file = tete ; 10

iii. Procédure d enfiler une valeur à la file d attente (en queue de la file). Void EnqueueFile(fila **T_file, item valeur) Fila *nouveaunode = malloc(sizeof *nouveaunode) ; If (nouveaunode!= NULL) /* pour vérifier sa création*/ Nouveaunode->suiv = NULL ; /* Car il sera le dernier*/ Nouveaunode->info = valeur ; If (*T_tete == NULL) /* ie elle est vide*/ *T_file = nouveaunode ; /* ie elle devient singleton*/ Else /* ie elle n est pas vide il faut la parcourir jusqu à la fin «Q_file»*/ Fila *Q_file = *T-file ; /*Q_file comme Queue de la file*/ While (Q_file->suiv!= NULL) Q_file = Q_file->suiv ; Q_file->suiv = nouveaunode ; 11

BIBLIOGRAPHIE 1- Langage C : Cours et références Pierre NERZIC Mars 2003 2- Langage C : Support de cours Patrick CORDE Mars 2006 3- Data structures and programming design Robert L. Kruse 4- Algorithmique, structures de données et langage C J.M. ENJALBERT Janvier 2005 5- An introduction to methodical programming W. Findbay and D. Wattes 6- Apprendre à programmer Algorithmes et conception objet. C. Dabancourt 12