begin process at 2012 05 27 19:53:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > HEADER POUR GERER UNE PILE DYNAMIQUEMENT

HEADER POUR GERER UNE PILE DYNAMIQUEMENT


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :stack, pile, header, h, gerer Niveau :Débutant Date de création :27/05/2006 Date de mise à jour :02/07/2006 18:01:15 Vu / téléchargé :4 191 / 135

Auteur : deck_bsd

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 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

  • /*
  • * 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);
  • }
/*
 * 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);
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

27 mai 2006 11:14:32 :
problème. j'y regarde
27 mai 2006 11:23:57 :
- problème reglé.
27 mai 2006 11:27:29 :
- Ajout du zip.
02 juillet 2006 18:01:15 :
- Correction du titre.

 Sources du même auteur

Source avec Zip Source avec une capture [C/WIN32][DRIVER] DÉTECTION DE CRÉATION OU DE SUPPRESSION DE...
Source avec Zip Source avec une capture [C/WIN32] INJECTION DE DLL 2 MÉTHODES (REMOTETHREAD PROPRE &...
Source avec Zip Source avec une capture [C/WIN32][VISTA] EXEMPLE D'UTILISATION DES TRANSACTIONS.
Source avec Zip Source avec une capture [C/WIN32] GÉNÉRATEUR DE CODE POUR UNE INITIALISATION SPÉCIAL...
Source avec Zip Source avec une capture [C/WIN32] AFFICHE TOUT LES LIENS D'UNE PAGE (X)HTML.

 Sources de la même categorie

Source avec Zip Source avec une capture EVAL EXPRESSION COMPLEXE EN 15 LIGNES DE CODE par yann_lo_san
Source avec Zip SCHEDULER RR FIFO par yvesB87
Source avec Zip ALGORITHMES RÉCURSIFS VS ALGORITHMES ITÉRATIFS par yvesB87
Source avec Zip Source avec une capture C++ FORMAT D'IMAGE AVEC QT par pop70
Source avec une capture EXEMPLE DE POINTEURS DE FONCTION par pop70

 Sources en rapport avec celle ci

Source avec une capture STACK WATCHER par lilxam7
Source avec Zip BIBLIOTHÈQUE DE GESTION DES PILES DYNAMIQUES EN C par Sunglasses
Source avec Zip BIBLIOTHÈQUE DE GESTION DES PILES STATIQUES EN C par Sunglasses
Source avec Zip Source avec une capture RÉSOLUTION DE LABYRINTHE AVEC PILE par damned3
GESTION D'UNE PILE PAR LES CLASSES par UKR6900

Commentaires et avis

Commentaire de Cyberboy2054 le 27/05/2006 12:06:09

Y a t'il une raison à la non utilisation des template dans ton code (obligé de coder en C) ? Cela semble pourtant tout indiqué ...

Commentaire de vecchio56 le 27/05/2006 12:13:59 administrateur CS

A mon avis la raison c'est qu'il connait pas la C++ :)
Et puis en C++ il y a déja le template stack

Commentaire de Cyberboy2054 le 27/05/2006 13:29:26

Ca ne t'empeche pas de recoder une pile pour comprendre le principe, c'est d'ailleurs ce que font à peu près tous les étudiants en info.
Ca me faisait penser à des template vu qu'il nommait le type "templaté" T, alors que c'est le nom qu'on donne en général aux type dans template... mais c'est vrai que c'est aussi l'initiale de "type".
Enfin bref, en C++ t'aurais pu faire la même chose sans te prendre la tête à devoir déclarer les types avant l'inclusion du header, du coup tu pourrais gérer des piles de 2 types différents dans le même fichier, c'est à dire que tu aurais pu t'éviter tous les désagréments des #define :)

Commentaire de deck_bsd le 27/05/2006 13:43:08

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  ;)

Commentaire de laurent1024 le 27/05/2006 18:47:08

Heu .... le type bool c'est pas du C++ ??

Commentaire de deck_bsd le 27/05/2006 18:49:28

si met regarde , j'ai inclu stdbool.h donc plus du C++ ;)

Commentaire de laurent1024 le 27/05/2006 18:52:01

Excuses, j'avais pas vu !

Commentaire de deck_bsd le 27/05/2006 19:28:34

pas de mal ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Utilisation de stack en C++ [ par jagdjg ] J essaie de faire un stack mais ca ne marche pas La declaration est : Stack* pile = new Stack();le push : pile-&gt;Push(strPile);le pop : strPile = pi stack et char * [ par yuriashford ] Salut &#224; tous je developpe actuellement une application qui utilise une stack de STL&nbsp; la stack est une declar&#233; : stack&lt;char *&gt; pil Pile de double [ par Pof ] Bonjour ! voil&#224; j'ai un petit probl&#232;me avec les std::stack :std::stack&lt;double&gt; stack;stack.push(20);stack.push(10);[...]double a = sta [C] Généricité et cast automatique. [ par LocalStone ] Salut, Alors voilà ... Je me posais la question suivante : existe-t-il un moyen en C de gérer la généricité de manière transparente ? Je m'explique .. surcharge pile, variable global [ par blinix123 ] Bonjour, J'ai un projet basique, des fonctions, des procedure, des talbeaux, des .c et des .h ! Je déclare un tableau int carte[][LARGEURPIXEL] dans l http...header and content... [ par DevGizmo ] Bonjour tout le monde...Je fais une requete http (1.1) sur un serveur; lorque je recois la reponse de celui-ci il me renvoi le header + le contenu de Programmation Orientée Composant (pile) [ par dragarth1 ] Bonjour tout le monde!J'ai un devoir à faire pour l'école, nous devons développer un composant pile qui est ensuite utilisé par tpile, tpile étant le [PB] telecharger une image [ par sebastienmz ] Bonjour a toutes et a tous !voila j'ai du code qui télécharge l'image qui se trouve en haut de votre écran de cppfrance a gauche de fiche mais j'arriv stack overflow !!!! [ par azamharir ] salut, je fais un jeux de taquin en C++ avec visual studio 6.0. j'utilise la recherche en profondeur, Hill climging et A* chaque et un programme à par Probleme compilation Dev-c++ [ par Darksnakes ] Bonjour tout le monde,Voilà, je débute en c++. J'ai un tp à faire concernant les classes mai j'ai un probleme lors de la compilation.j'ai trois fichie


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales