Structure de pile

Contenu du snippet

Structure de pile à l'aide d'une liste chainee

Source / Exemple :


#include<stdio.h>
#include<stdlib.h>

typedef struct maillon *pmaillon;
struct maillon
{
int nombre;
pmaillon suivant;
};
void menu();
void *alloue(int taille);
pmaillon CreeMaillon(int valeur);
pmaillon InsertionTete(pmaillon ptete,int valeur);
pmaillon Depiler(pmaillon ptete);
void TeteListe(pmaillon ptete);
void PrintListe(pmaillon ptete);
pmaillon ClearListe(pmaillon ptete);
main()
{
int choix,n;
pmaillon ptete=NULL;
do
      { 
      menu();
      scanf("%d",&choix);
                   switch(choix)
                   {
                    case (1) :
                    {printf("Entrez un nombre \n");
                    scanf("%d",&n);
                    ptete = InsertionTete(ptete,n);
                    break;
                    }
                    case (2) :
                    {ptete = Depiler(ptete);
                    break;
                    }
                    case (3) :
                    {PrintListe(ptete);
                    break;
                    }
                    case (4) :
                    {TeteListe(ptete);
                    break;
                    }
                    case (5) :
                    {ptete = ClearListe(ptete);
                    break;
                    }
                   }
        }
while(choix!=9);
getch();
}

void menu()
{
printf("1. Empiler \n");
printf("2. Depiler \n");
printf("3. Imprimer la pile \n");
printf("4. Afficher la tete de pile \n");
printf("5. Vider la pile \n");
printf("9. Fin \n");
printf("Votre choix ? \n");
}

void *alloue(int taille)
{
  void *p;
  p=(void*)malloc(taille);
  if(p==NULL)
  {
    printf("Erreur d allocation memoire\n");
    exit(1);
  }
  else return p;
}
pmaillon CreeMaillon(int valeur)
{
pmaillon p;
p=(pmaillon)alloue(sizeof(struct maillon));
p->nombre=valeur;
p->suivant=NULL;
return p;
}

pmaillon InsertionTete(pmaillon ptete,int valeur)
{
pmaillon p;
p = CreeMaillon(valeur);
p->suivant=ptete;
return p;
}

pmaillon Depiler(pmaillon ptete)
{
pmaillon p;
if(ptete == NULL)
    {
    fprintf(stderr,"Pile vide ! \n");
    getch();
    return ptete;
    }
p=ptete;
ptete=ptete->suivant;
free(p);
return ptete;
}
void TeteListe(pmaillon ptete)
{
if(ptete == NULL)
    {
    fprintf(stderr,"Pile vide ! \n");
    getch();
    }
else printf("La tete est : %d",ptete->nombre);
getch();
}

void PrintListe(pmaillon ptete)
{
pmaillon pcourant;
if(ptete == NULL)
    {
    fprintf(stderr,"Liste Vide !");
    getch();
    }
else
    {
    for(pcourant=ptete;pcourant != NULL ;pcourant=pcourant->suivant)
    printf("%d \n",pcourant->nombre);
    }
}

pmaillon ClearListe(pmaillon ptete)
{
pmaillon p;
while(ptete != NULL)
    {
    p=ptete;
    ptete=ptete->suivant;
    free(p);
    }
return ptete;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.