Programmation procédurale : C 1AGE ENIT2018/2019
Corrigé TD8
Pile et File
Exercice 1:
#include <stdio.h>
#include <stdlib.h>
/******* Définition d'une structure pile ***/
typedef struct
{
int val;
struct pile* prec;
}*pile;
/*********** Fonction de création de la pile ********/
pile creer_pile()
{
return NULL;
}
/**************Fonction de test pour savoir si la pile est vide ****/
int vide(pile p)
{
return (p==NULL) ;
}
/******Fonction qui retourne le sommet de la pile ****/
int sommet(pile p)
{
if(p)
return p->val;
else return -32;
}
/*******Fonction qui empile une valeur sur la pile *****/
void empiler(pile * p, int ival)
{
pile e;
e=(pile)malloc(sizeof(pile)) ;
e->val=ival;
e->prec=*p;
*p=e;
}
1/3
Programmation procédurale : C 1AGE ENIT2018/2019
/*******Fonction qui désempile la pile *****/
pile dsemepiler(pile *p)
{
pile np;
if(*p)
{
np=*p;
*p= (*p)->prec;
free(np);
}
}
/*****Fonction qui affiche la pile de manière récursive ***/
void afficher_recursive(pile p)
{
int ival;
if(p)
{
ival = p->val;
p=p->prec;
afficher_recursive(p);
printf("%d ", ival);
}
}
/*************Programme principal************/
int main()
{
pile p;
p=creer_pile();
empiler(&p, 8);
empiler(&p, 4);
empiler(&p, 19);
afficher_recursive(p);
return 0;
}
Exercice 2 :
#include <stdio.h>
#include <stdlib.h>
/****Définition d'un type file de caractères ****/
typedef struct
{
char * cdebut;
char * cfin;
char * ctete;
char * cqueue;
}*file;
/******Fonction de création de la file *******/
file creer(unsigned Taillef)
{
file f;
f=(file)malloc(sizeof(file));
f->cdebut = f->ctete= (char*) malloc(Taillef);
f->cfin=f->cqueue = f->cdebut + Taillef - 1;
return f;
}
2/3
Programmation procédurale : C 1AGE ENIT2018/2019
/******Fonction de déplacement d'un espace mémoire d'un pointeur de la file *******/
char * plusun(file f, char * cpointeur)
{
if(cpointeur==f->cfin)
return f->cdebut;
else
return ++cpointeur;
}
/******fonction de test permettant de savoir si la file est vide **/
int vide(file f)
{
return (plusun(f, f->cqueue)==f->ctete);
}
/******fonction de test permettant de savoir si la file est pleine **/
int pleine(file f)
{
return(plusun(f, f->cqueue+1)==f->ctete);
}
/********Fonction de lecture de la tête de la file****/
char lire(file f)
{
if(!vide(f))
return(*(f->ctete));
}
/************Programme principal**********************/
int main()
{
file f;
f=creer(4);
printf("%c ", lire(f) );
return 0;
}
3/3