Comment faire une pile?

cs_007berty Messages postés 13 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 16 janvier 2009 - 11 janv. 2008 à 12:15
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 - 17 janv. 2008 à 00:20
bonjour à tous!
je suis un débutant en informatique et il se trouve que je veux faire une pile en C++ en utilisant non pas les pointeurs , mais les tableaux.  Mais je ne sais pas comment m'y prendre . Pourriez vous me montrer à travers un exemple comment procéder?

11 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
11 janv. 2008 à 13:05
Ben tu crées simplement un tableau et une variable index qui référence la position actuelle dans le tableau...
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
11 janv. 2008 à 17:57
Yop,

Un tableau c'est bien, mais bon, on gaspille de la mémoire si il est pas tjrs remplis et problème si plus de place. Bref si tu est débutant, prend le temps de bien aprendre , jusqu'au au pointeur et aux structure de donnée et là tu pourra implémenter une pile avec allocation dynamique et tt le brol qui va avec . Et la tu aura une pile digne de ce non mdr.

Maintenant si tu veux vraiment avec un tableau, déjà te demander si ta pile sera de type FIFO (First in first out) ou LIFO (last in , first out) . Une fois que tu auras décider, et bien réfléchi au index qui te serai utile (position de debut, position courante,...) et puis ensuite tu code, ya rien de bien compliqué , c'est de la logique pure.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 janv. 2008 à 20:24
Une pile dynamique est une perte de cycle CPU considérable. À éviter si on sait ce qui ira dedans (et la quantité).

Une pile FIFO ? Attention file et pile, ce n'est pas du tout la même chose et ce n'est pas non plus utilisé dans les mêmes contextes.

"position de debut, position courante,..."
Dans une pile, aucune utilité d'avoir un index sur le début.

C++ (@++)<!--
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
11 janv. 2008 à 20:32
Oui SAKingdom, perte de cycle CPU ok, mais en générale une pile est rarement un tableau tt de même. Entièrement daccord que si tu connait la quantité un tableau serai plus adéquoi pour autant que tu n'ai q'un type à mettre sur la pile. Cependant en algo on utilise rarement un tableau pour faire une pile. Oui FIFO LIFO ne sont pas la mm chose d'ailleur c'est bien ce que j'ai dit au dessus et non le contraire donc voila ...

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0

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

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 janv. 2008 à 21:09
"pour autant que tu n'ai q'un type à mettre sur la pile."
Type ? Type de données ?
Je ne vois pas très bien comment mettre plusieurs type de données dans une pile.

C++ (@++)<!--
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
11 janv. 2008 à 21:17
Ben avec une structure pardi.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 janv. 2008 à 21:25
Je ne vois toujours pas.
Tu parles d'une pile de structure ?

struct toto {
    int i, j;
};

toto pile[32];

C++ (@++)<!--
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
12 janv. 2008 à 09:13
:D il y à parfois des moments ou il vaudrait mieu ce taire, et je croie que hier c'était un de ces moments la pour moi. Je ne sais pourquoi j'ai répondu cela, c'était complètement stupide je le reconnaite (je parle du type lol) . Sans doute que j'ai plus l'habitude d'utilisé les structures dans un cadre dynamique plutot qu'avec des tableau :s . Je retire ce que j'ai dit.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
16 janv. 2008 à 23:58
Salut,

template<class Object>
class Pile
{
    public:
        Pile(const Object defaultObject,const unsigned capacity=100);
        ~Pile();

       bool push(const Object object);
       const Object pop();
       const Object top()const;

  private:
       unsigned topIndex;
       unsigned capacity;
       Object* array;
       Object defaultObject;
}

template<class Object>
Pile<Object>::Pile(const Object defaultObject, const unsigned capacity)
{
    this->capacity = capacity;
    this->defaultObject = defaultObject;
    topIndex = 0;
    array = new Object[capacity];
   if(!array)this->capacity = 0;
}

template<class Object>

Pile<Object>::~Pile()
{
    if(capacity)delete [] array;
}

template<class Object>

bool Pile<Object>::push(const Object object)
{
    if(topIndex==capacity-1)return false;
    array[++topIndex] = object;
    return true;
}
template<class Object>
const Object Pile<Object>::pop()
{
    if(topIndex<0)return defaultObject();//undefined
    return array[topIndex--];
}
template<class Object>
const Object Pile<Object>::top()
{
    if(topIndex<0)return defaultObject();//undefined

    return array[topIndex];
}

Bien sur c un template avec des recopies d'objets, pour eviter la recopie utiliser des references serait approprie:2 niveaux
1- lors de la creation de la pile Pile<classe*> p;
2- lors de la declaration et l'implementation de la pile: avec des &

j'espere avoir aide, salut
je suis heureux de faire partie d'une grande famille ...!
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
17 janv. 2008 à 00:14
bool Pile<Object>::push(const Object object)
{
    if(topIndex==capacity-1)return false;
    array[++topIndex] = object;
    return true;
}

Tu gaspilles un emplacement mémoire en procédant de la sorte.

C++ (@++)<!--
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
17 janv. 2008 à 00:20
salut,
 il faut initialiser topIndex a -1 au lieu de 0 , merci

je suis heureux de faire partie d'une grande famille ...!
0
Rejoignez-nous