Faire une pile en C

lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008 - 28 janv. 2008 à 09:43
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 1 févr. 2008 à 00:56
Bonjour,
je voudrais faire une pile de fonctions en C
mais je ne sais pas du tout comment la faire sans utiliser de malloc
Je veux pas de malloc car je veux une vrai pile(comme en assembleur) mais pas de liste chainée
Si quelqu'un sait comment le faire je suis preneur
merci d'avance

8 réponses

Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
28 janv. 2008 à 10:26
et bien si tu connais la taille max de ta pile tu peux toujours allouer un tableau statique et gérer toi même l'ajout et le rentrait d'éléments non?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
28 janv. 2008 à 15:46
Un tableau, comme dit par Spiffou et un index. C'est le minimum.
int pile[50];
int i = 0;

pile[i++] = 5; // On empile
j = pile[--i]; // On dépile

Tu peux aussi te faire des fonctions push et pop pour savoir si, par exemple, la pile est plein ou vide etc.

Sinon, sera un peu dur de faire une pile dynamique si tu ne veux pas utiliser l'allocation dynamique.

C++ (@++)<!--
0
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008
30 janv. 2008 à 14:41
je me suis mal fait comprendre apparemment
j'ai dit pile de fonction

genre pile[0]=&fonction.o;
ou pile[0]=&fonction.c
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 janv. 2008 à 14:40
Je ne comprend pas. Si tu parles d'une pile de pointeurs sur fonction, ok, c'est le même principe. Mais, d'après ton exemple, je ne vois vraiment pas de quoi tu parles.

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008
31 janv. 2008 à 16:57
Mon exemple était un peu nul

Je crois qu'on est tous d'accord qu'une fonction et une procédure c'est quasi comparable.
Un pointeur de fonction c'est un truc du genre

int (*p_1ms)(int, int)=NULL;
p_1ms =&add;
int (*tab_fct[3]) () = {p_1ms, p_10ms,p_100ms};

mais comment faire une pile de pointeur de fonction(ou plutot de programme genre  add.c?
car toi tu fais une pile d'entier.
En gros par rapport à toi faudrais mettre les adresses des  fonctions ou des programmes.
Ca serait encore mieux pour moi 
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 janv. 2008 à 22:11
Comme ça le dis, il s'agit de pointeurs de fonction.
Un pointeur fait 4 octets (32bits).
Tu fais donc un tableau de DWORD dans lequel tu stocks l'adresse pointé, puis quand tu fais l'appel, tu transtypes (cast).

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 janv. 2008 à 22:12
"Un pointeur fait 4 octets (32bits)."
Sur un système 32 bits bien sûr.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 févr. 2008 à 00:56
Ou encore si tes fonctions ont toutes le même prototype:
Exemple:

typedef void(__stdcall *EXEMPLE)(int, int, int);

EXEMPLE pile[50];
int i = 0;

pile[i++] = fonction1; // On empile la fonction void __stdcall fonction1 (int a, int b, int c)
pile[--i](1, 2, 3); // On dépile et appel la fonction dans la pile

C++ (@++)<!--
0
Rejoignez-nous