Vous êtes sur la page 1sur 15

Les Piles

typedef struct pp
{int val;
struct pp *suivant;
n
} pile ;
Fonctions de
bases
‐Créer une pile vide
‐Tester si une pile est vide
‐Empiler
‐Dépiler
‐Donner un élément en tête de
pile
Créer une pile
vide
pile *creerpile()
{
return
NULL;
}
Tester si la pile est
vide
char estvidepile(pile *p)
{
return
(p==NULL);
}
pile *empiler(pile *p, int donnee)
{
pile *p_nouveau;
if (p_nouveau=(pile *)malloc (sizeof(pile)))==NULL)
{printf (‘’erreur allocation’’);
exit (1);
}
p_nouveauval = donnee;
p_nouveausuivant = p;
return p_nouveau;
}
pile *depiler(pile *p)
{
pile *p_libre;
if (estvidepile(p))
{ printf (‘’erreur la pile est vide’’);
exit (1);
}
p_libre= p;
p = psuivant;
free(p_libre);
return p;
}
int obtenir_tete (pile *p)
{
if (estvidepile(p))
{ printf (‘’erreur la pile est vide’’);
exit (1);
}
return p->val;
}
Les Files
À bases de listes chaînées
Sans parcours
typedef struct el
{
int val;
struct el *suiv;
struct el *pre;
} element;

typedef struct ff
{
element *debut;
element *fin;
int taille;
} File;
int estvidefile(File *f)
{
if (f→taille==0)
return 1;
else return 0;
}
File *defiler ( File *f )
{ element *y;
if (f→ taille==0)
exit(1);
if (f→ taille==1)
{ free(f→debut);
f→ debut=NULL;
f→ fin=NULL;
f→ taille=0; }
else { y=f→debut;
f→ debut= (f→ début) →suivant;
( f→debut) → prec=NULL;
free(y);
f→taille--; }
return f ;
}
File * enfiler (File *f, int data)
{ element *z;
z=(element *) malloc (sizeof(element));
z->val=data;
if estvidefile (f)
{ z→ suiv=NULL;
z→ pre =NULL;
f→ debut= z;
f→ fin=z;
}
else
{(f->fin)->suiv= z;
z->pre= f->fin;
z->suiv=NULL;
f->fin=z;
}
f→taille++;
return f ; }
int valeur_tete ( File * f )
{
{
if (f→taille==0)
exit(1);
}

return((f→debut)→ val);
}
Exercice :
• Donnez la structure de données d’une file simplement
chaînée
• Donnez toutes les fonctions élémentaires :
(estvidefile, defiler, enfiler, valeur_tete)

Vous aimerez peut-être aussi