Header pour gerer une pile dynamiquement

Soyez le premier à donner votre avis sur cette source.

Vue 5 163 fois - Téléchargée 180 fois

Description

Ce header contient les fonctions fondamentale pour gérer une pile de type LIFO.

Fontions présentes :
- Créer une pile (dCreateStack).
- poser un élément au dessus de la pile (dPush).
- Retirer un élément de la pile (dPop). Attention elle renvoie aussi la valeur de l'élément.
- Voir l'élément au dessus de la pile (dTop).
- Vérifer si la pile est vide ou non (dIsEmpty).
- Destruction de la pile (dDestroyStack).

Les constante T et EMPTY doivent être définies pour un bon fonctionnement.
T = type de l'élément.
EMPTY = Valeur retournée en cas de pile vide.

Compatible Linux & windows

Commande pour compiler le code avec gcc sous linux :
gcc cPile.h -o nom_souhaite -std=c99

Source / Exemple :


/*

  • Create by : deck_bsd
  • Date of creation : 27/05/2006.
  • Task : This header contain the fundamental functions for the to use a stack. (Linux/windows).
*
  • Remark : The constante T and EMPTY must be defined in a #define before the include of header.
  • /
#include <stdbool.h> typedef struct element{ T tElem; struct element * ptNext; }ELEMENT; typedef struct stack{ ELEMENT * ptTop; }STACK; /*TASK : Create a stack. */ STACK * dCreateStack(void){ STACK * ptPile; ptPile = (STACK*)malloc(sizeof(STACK)); if(ptPile == NULL) return NULL; ptPile->ptTop = NULL; return ptPile; } /*TASK : Put a element onto the stack. */ bool dPush(STACK * ptPile,T ttElem){ ELEMENT * ptNewElem; ptNewElem = (ELEMENT*)malloc(sizeof(ELEMENT)); if(ptNewElem == NULL) return false; ptNewElem->tElem = ttElem; ptNewElem->ptNext = ptPile->ptTop; ptPile->ptTop = ptNewElem; return true; } /*TASK : Delete the element on the top of stack and return its value. */ T dPop(STACK * ptPile){ T ttElem; ELEMENT *ptDes; if(ptPile->ptTop == NULL)return EMPTY; ptDes = ptPile->ptTop; ttElem = ptDes->tElem; ptPile->ptTop = ptDes->ptNext; free(ptDes); return ttElem; } /*TASK : return the value of the top. */ T dTop(STACK * ptPile){ if(ptPile->ptTop != NULL)return ptPile->ptTop->tElem; return EMPTY; } /*TASK : check the state of the stack. */ bool dIsEmpty(STACK * ptPile){ if(ptPile->ptTop == NULL)return true; return false; } /*TASK : destroy the stack. */ void dDestroyStack(STACK * ptPile){ ELEMENT * ptDes,* ptSave; if(ptPile->ptTop != NULL){ ptDes = ptPile->ptTop; while(ptDes != NULL){ ptSave = ptDes->ptNext; free(ptDes); ptDes = ptSave; } } free(ptPile); }

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
pas de mal ;)
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
Excuses, j'avais pas vu !
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
si met regarde , j'ai inclu stdbool.h donc plus du C++ ;)
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
Heu .... le type bool c'est pas du C++ ??
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Certe mais je code pas en C++ mais en C, et puis concernant les piles, la majorité des codes sont des classes de C++. Alors un petit peu de C ne fait pas de mal. lol ;)
Afficher les 8 commentaires

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.