Question

Salut à tous! Avoir un petit problème avec ma pile. J'essaie d'imprimer chaque élément que j'ai mis sur la pile.

En commençant par le gestionnaire de pile, nous savons que nous avons une taille fixe pour le tableau. J'attribue donc à l'objet struct un objet qui ne contient que beaucoup d'espace:

stack::stack(int capacity)
{   
  items = new item[capacity];

  if ( items == NULL ) {
    throw "Cannot Allocoate Sufficient Memmory";
    exit(1); 
  }
  maxSize = capacity;
  top       = -1;
}

Oui, items est un type de structure de l'objet & "item &"; Jetez un coup d'oeil:

class stack
{
  stack(int capacity);
  ~stack(void);
...
  private:
    int maxSize; // is for the item stack
    int top;     // is the top of the stack
    struct item {
      int n;
    };
    item        *items;                 

  public:
    friend ostream& operator<<(ostream& out, stack& q)
  ...

D'abord et ensuite, nous voulons ajouter à la pile en poussant chaque élément entrant dans le tableau FILO:

bool stack::pushFront( const int n )
{
     if ( top >= maxSize-1 ) 
{
    throw "Stack Full On Push";
    return false;
}
else 
{
    ++top;
    items[top].n = n;
}
return true;
}

// just a textbook example here:
stack::~stack(void)
{
  delete [] items;

  items    = NULL;
  maxSize = 0;
  top      = -1;
}

Oui, le vrai problème pour moi, ce sont les éléments [++ top] .n = n; déclaration. J'ai essayé de savoir comment faire glisser (+) le tableau d'éléments pour voir TOUS les éléments du tableau après avoir poussé sur la pile.

Je me demande pourquoi je ne peux pas faire glisser cette instruction [++ top] .n = n lors du débogage im. Tout ce qui se pose est la valeur transmise en tant que paramètre "n". Dois-je utiliser un tableau de type objet pile pour stocker les valeurs?

Quand je surcharge le < < opérateur et essayez d’imprimer les éléments, j’obtiens un nombre négatif incroyablement grand:

ostream& operator<<(ostream& out, stack& q)
{
    if ( q.top <= 0 ) // bad check for empty or full node
    out << endl << "stack: empty" << endl << endl;
    else
        for ( int x = 0; x < q.maxSize; x++ )
        {
            out << q.items[x].n; // try to print elements
        }
    return out;
}

Je suis loin et j'ai besoin d'un peu de confiance si quelqu'un a le temps!

Était-ce utile?

La solution

Dans le < surchargé; < opérateur dans la boucle for, vous effectuez une itération de la durée maximale. Mais vous n’avez peut-être pas inséré d’éléments de taille maximale dans la pile. Vous devriez parcourir les meilleurs temps. Également, écrivez un constructeur par défaut pour la structure d’article et initialisez toutes les variables afin que vous ne obteniez pas de valeurs parasites lorsque vous essayez de les imprimer.

Autres conseils

Lorsque vous imprimez la pile, vous ne devez aller que jusqu'au sommet, pas jusqu'à maxSize.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top