Frage

Hey alle! Mit einer wenig Mühe mit meinem Stack. Im Versuch, jedes Element zu drucken, die ich auf den Stapel geschoben habe.

Beginnend mit dem Stapel Ctor wir wissen, dass wir eine feste Größe für das Array haben. Also ich zuteilen die Elemente Struktur nur so viel Platz zu halten Objekt:

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

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

Ja, Artikel ist ein Strukturtyp des Objektes „Position“. Werfen Sie einen Blick:

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

In erster formost wollen wir durch Drücken jedes eingehende Element in das Array FILO zu dem Stapel hinzuzufügen:

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

Ja das wirkliche Problem ist für mich die Elemente [++ top] · n = n; Aussage. Ich habe versucht, herauszufinden, wie ich ziehe (+), um den Artikel Array aus ALL den Array-Elementen zu sehen, nachdem ich auf den Stapel schieben.

Ich frage mich, warum ich ziehen kippe, dass Artikel [++ top] · n = n-Anweisung aus, wenn im Debugging. Alles, was oben kommt, ist der Wert, der als ‚n‘ Paramater übergeben wird. Muss ich einen Stapel Objekttyp Array verwenden, um die Werte in speichern?

Wenn ich den Operator << überlastete und versuchen, die Elemente, die ich eine wahnsinnig große negative Zahl erhalten drucken:

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

Ich bin weg und ich brauche etwas guidence wenn jemand hat die Zeit!

War es hilfreich?

Lösung

In dem überladenen Operator << in der for-Schleife Sie iterieren maxsize mal. Aber Sie könnten nicht maxsize Elemente in den Stapel geschoben haben. Sie sollten Top-mal wiederholen. Auch einen Standardkonstruktor für Item-Struktur schreiben und alle variblaes initialisieren, so dass Sie nicht Müll Werte erhalten, wenn Sie versuchen, sie zu drucken.

Andere Tipps

Wenn der Stapel ausdrucken, sollten Sie nur oben gehen bis zu, nicht bis zu maxSize.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top