Il s'agit d'une pile d'entier à allocation dynamique. J'ai réalisé ceci pour des opérations sur des graphes (Algorithmie). Ce sera utile pour certains et inutile pour d'autres...
Source / Exemple :
#include <stdio.h>
int *pile;
int pos = 0; //position dans la pile
// Initialisation de la pile
int InitPile(size_t taille)
{
pile = (int *)malloc(taille);
if(pile != NULL){ pos = 1; return 0; }
return 1;
}
// Fonction d'empilage des entiers
void Empiler(int entier)
{
pos++;
}
// Fonction de dépilage des valeurs
int Depiler()
{
pos--;
return *(pile+pos);
}
// Fonction d'affichage d'une valeur précise
int Select(int x)
{
if((x >= 0) && (x <= *pile))
return *(pile+x);
return -1;
}
// Fonction de vidage de la pile
void ViderPile()
{
int taille = *pile;
memset(pile, 0, taille);
pos = 1;
return;
}
int main()
{
int value;
size_t taille;
printf("Taille de la pile :\n");
scanf("%d", &taille);
InitPile(taille);
printf("Empiler :\n");
scanf("%d", &value);
Empiler(value);
printf("Depiler : %d\n", Depiler());
printf("Afficher une valeur :\n");
scanf("%d", &value);
printf("%d\n", Select(value));
printf("Vider la pile :\n");
ViderPile();
//system("pause");
return 0;
}
Conclusion :
Si l'allocation de la pile échoue, la fonction InitPile() renvoit 1 (gestion des erreurs).
L'utilisation de la pile est illustrée dans la fonction main().
Remarque : le premier élément de la pile (position 0) contient sa taille.
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.