IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

faire une pile en C


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 47
    Points
    47
    Par défaut faire une pile en C
    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

    Pour info ca doit marcher aussi bien sur linux que sur windows.

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par Sylar44 Voir le message
    Bonjour,
    je voudrais faire une pile de fonctions en C
    mais je ne sais pas du tout comment la faire sans utiliser de malloc
    Malloc est utilisé pour l'allocation dynamique. Si tu ne souhaites pas utiliser l'allocation dynamique il te reste la déclaration des variables en statique, que ces dernière soit globales (déconseillé) ou locales.

    exemple :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    #include <...>
    #include <...>
     
    typedef struct
    {
        int stack_pointer; 
        int elems[100];
    } Stack;
     
    int main (void)
    {
     
        Stack stack;
     
        init_stack(&stack);
     
        push(&stack, 10);
     
        display_stack(&stack);
     
        /* .... */
     
        return 0;
    }

    Généralement, il suffit d'une fonction d'initialisation, push, pop, et une fonction d'affichage. On peut ensuite greffer d'autres fonctions (peek, peak, top, etc.)

    Je veux pas de malloc car je veux une vrai pile(comme en assembleur) mais pas de liste chainée
    Pas "forcément" besoin d'une liste chaînée pour faire une pile, ni d'allouer dynamiquement.

    Pour info ca doit marcher aussi bien sur linux que sur windows.
    Il suffit de respecter le standard C.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 47
    Points
    47
    Par défaut
    ok merci
    je vais essayer de faire ca

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 47
    Points
    47
    Par défaut

    tu peux toi même créer une fonction d'empilage(push), de dépilage(pop) et sans utiliser ni le malloc ni les structures (tu n'as que bien comprendre comment ca marche avec les piles, et tu sauras comment empiler et dépiler)
    bon, calarifions ce qui semble obscur:
    on sait tous qu'une pile est une structure de données fonctionnant selon le mode LIFO(last in first out), donc dans une pile on aura besoin juste d'un indice (qu'on va appeler sommet) et un tableau (si tu veux, qu'on va appeler pile[]), et à chaque fois qu'on remplie notre pile on incrémente le sommet(jusqu'à atteint le maximum), sinon on le décrémente(tout cour), et pour t'aider je vais comme meme te donner la fonction empiler, mais c'est à toi de trouver les autres:dépiler, estvide..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
    #define max 10 //dans cet exemple on ne prend que 10 elements ds la pile
    int pile[max],sommet=0;
    void empiler(int val)    /*val est la valeur qu'on a interet à empiler*/
    {
      /*là c'est à toi de le faire: tu dois tester si la pile n'est pas complétement remplie*/
       pile[sommet++]=val;     //equivalent à:pile[sommet]=val;sommet++;
    }
    Bon courage!!

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par smpinf Voir le message

    tu peux toi même créer une fonction d'empilage(push), de dépilage(pop) et sans utiliser ni le malloc ni les structures (tu n'as que bien comprendre comment ca marche avec les piles, et tu sauras comment empiler et dépiler)
    bon, calarifions ce qui semble obscur:
    on sait tous qu'une pile est une structure de données fonctionnant selon le mode LIFO(last in first out), donc dans une pile on aura besoin juste d'un indice (qu'on va appeler sommet) et un tableau (si tu veux, qu'on va appeler pile[]), et à chaque fois qu'on remplie notre pile on incrémente le sommet(jusqu'à atteint le maximum), sinon on le décrémente(tout cour), et pour t'aider je vais comme meme te donner la fonction empiler, mais c'est à toi de trouver les autres:dépiler, estvide..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
    #define max 10 //dans cet exemple on ne prend que 10 elements ds la pile
    int pile[max],sommet=0;
    void empiler(int val)    /*val est la valeur qu'on a interet à empiler*/
    {
      /*là c'est à toi de le faire: tu dois tester si la pile n'est pas complétement remplie*/
       pile[sommet++]=val;     //equivalent à:pile[sommet]=val;sommet++;
    }
    Bon courage!!
    Implanter une pile à l'aide d'une variable globale, ce n'est pas top. En effet, outre les problèmes de couplage liés à l'utilisation de globales, cette implantation ne permet d'avoir qu'une seule instance de ta pile à n'importe quel instant t du programme. Je préfère donc la solution de Neitsa qui se base sur une structure.

    Thierry

  6. #6
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 47
    Points
    47
    Par défaut
    moi aussi de toute facon

Discussions similaires

  1. Faire une pile (stack) avec glib
    Par ymoreau dans le forum C
    Réponses: 2
    Dernier message: 18/02/2011, 09h39
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. Réponses: 6
    Dernier message: 12/01/2009, 00h12
  4. [LOGICIEL] Faire tourner une pile Hypercard
    Par Sepia dans le forum Apple
    Réponses: 2
    Dernier message: 15/01/2008, 14h33
  5. Réponses: 7
    Dernier message: 24/03/2006, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo