100% ont trouvé ce document utile (1 vote)
456 vues4 pages

Gestion de Piles en C avec Liste Chaînée

Ce document présente les solutions à des exercices sur les structures de données dynamiques. Il décrit comment implémenter une pile et une file avec une liste chaînée en C ainsi que les fonctions associées.

Transféré par

benjaminkonkobo242
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
456 vues4 pages

Gestion de Piles en C avec Liste Chaînée

Ce document présente les solutions à des exercices sur les structures de données dynamiques. Il décrit comment implémenter une pile et une file avec une liste chaînée en C ainsi que les fonctions associées.

Transféré par

benjaminkonkobo242
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

INSTITUT SUPERIEUR DU GENIE ELECTRIQUE Année académique 2022 / 2023

………………………………
2AMIFI – 2ARIT décembre 2023
…………………..
Semestre 3
…………….. P
a
Enseignant : Gouayon KOALA r
……………………………… c
o

CORRIGÉ TP N°2 - STRUCTURES DE DONNEES DYNAMIQUES

Exercice 1 (Pile.c):
1- Écrire en langage C, la structure d’une pile à l’aide d’une liste chaînée.
#include <stdio.h>
#include <stdlib.h>

/* Définition de la structure de donnée*/


typedef float TypeDonnee;

typedef struct Cell {


TypeDonnee donnee;
struct Cell *suivant;
} TypeCellule;

/**** Définition de la stucture Pile ****/


typedef TypeCellule *Pile;

2- Écrire les primitives de gestion des piles.


//Dans le même fichier Pile.c

/**** Fonction d'initialistion d'une Pile ****/


Pile Initialiser()
{
return NULL;
}

/**** Fonction EsVide : renvoie 1 si la liste est vide ****/


int EstVide(Pile P)
{
/* renvoie 1 si la Pile est vide */
return (P == NULL) ? 1 : 0;
}

/**** Fonction EstPleine une liste chaîne n’est jamais pleine ****/
int EstPleine(Pile P)
{
return 0; /* une liste chaÓnÈe níest jamais pleine */
}

/**** Fonction AccederSommet ****/


int AccederSommet(Pile P, TypeDonnee *pelem)
{
if (EstVide(P))
return 1; /* on retourne un code díerreur */
*pelem = P->donnee; /* on renvoie l’élément */
return 0;
}

/**** Fonction Empiler permet d’ajouter un élément au sommet ****/


void Empiler(Pile* pP, TypeDonnee elem)
{
Pile q;
q = (TypeCellule*)malloc(sizeof(TypeCellule)); /* allocation */
q->donnee = elem; /* ajout de l’élément à empiler */
q->suivant = *pP; /* insertion en tête de liste */
*pP =q; /* mise à jour de la tête de liste */
}

/**** Fonction Depiler permet de supprimer un element ****/


int Depiler(Pile *pP, TypeDonnee *pelem)
{
Pile q;
if (EstVide(*pP))
return 1; /* on ne peut pas supprimer d’élément */
*pelem = (*pP)->donnee; /* on renvoie l’élément de tête */
q = *pP; /* mémorisation d’adresse de la première cellule */
*pP = (*pP)->suivant; /* passage au suivant */
free(q); /* destruction de la cellule mémorisée */
return 0;
}

/**** Fonction Detruire la Pile ****/


void Detruire(Pile *pP)
{
Pile q;
while (*pP != NULL) /* parcours de la liste */
{
q = *pP; /* mémorisation de l’adresse */
/* passage au suivant avant destruction : */
*pP = (*pP)->suivant;
free(q); /* destruction de la cellule mémorisée */
}
*pP = NULL; /* liste vide */
}

/**** Fonction Vider la Pile ****/


void Vider(Pile *pP)
{
Detruire(pP); /* destruction de la liste */
*pP = NULL; /* liste vide */
}
3- Écrire un programme principal qui permet d’utiliser la pile avec un menu qui propose
les différentes opérations que l’on peut effectuer.
//Dans le même fichier Pile.c

int main(void){
int choix;
TypeDonnee *pelem;
TypeDonnee elem;

Pile *pP;
do {

printf("********************************\n");
printf("****** Gestion de Pile ******\n");
printf("******************************** \n");
printf("** sélectionnez l'opération :: ** \n");
printf(" 1 :: Créer une Pile vide \n");
printf(" 2 :: Ajouter un élément dans la Pile \n");
printf(" 3 :: Supprimer un élément dans la Pile \n");
printf(" 4 :: Tester si la Pile est vide \n");
printf(" 5 :: Détruire la Pile \n");
printf(" 6 :: Vider la Pile \n");
printf(" 0 :: Quitter le programme \n");

scanf("%d", &choix);

switch (choix){
case 1 : *pP = Initialiser();
printf(" La pile P a été créé avec succès \n");
break;
case 2 :
printf("Entrer la valeur de l'element à ajouter dans la Pile");
scanf("%f", &elem);
Empiler(pP, elem);
printf("L'element a été ajouté avec succès!!!");

break;

case 3 :
Depiler(pP, pelem);
printf("La valeur de l'element recupérer est :: %f", *pelem);

break;

case 4 :
if (EstVide(*pP) == 1)
printf("La Pile est vide");
else
printf("La Pile n'est PAS VIDE");
break;

case 5 : Detruire(pP);
break;

case 6 : Vider(pP);
break;

}while(choix ==0);

return 0;
}
Exercice 2 (File.c):

1- Écrire en langage C, la structure de file à l’aide d’une liste chaînée


2- Écrire les primitives de gestion des files.
3- Écrire un programme principal qui permet d’utiliser la file avec un menu qui propose
les différentes opérations que l’on peut effectuer.

Vous aimerez peut-être aussi