Domanda

Ciao a tutti! Ho dei problemi con il mio stack. Sto cercando di stampare ogni elemento che ho inserito nella pila.

A partire dallo stack ctor sappiamo che abbiamo una dimensione fissa per l'array. Quindi allocare gli oggetti struttura struct per contenere solo tanto spazio:

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

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

Sì, items è un tipo di struttura dell'oggetto " item " ;. Dai un'occhiata:

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 primo luogo e soprattutto vogliamo aggiungere allo stack spingendo ogni elemento in arrivo nell'array 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;
}

Sì, il vero problema per me sono gli elementi [++ top] .n = n; dichiarazione. Ho cercato di scoprire come trascinare (+) gli elementi dell'array per vedere TUTTI gli elementi dell'array dopo che ho inserito nello stack.

Mi chiedo perché non riesco a trascinare quell'elemento [++ top] .n = n istruzione fuori durante il debug. Tutto ciò che viene fuori è il valore che viene passato come parametro 'n'. Devo utilizzare un array di tipi di oggetti stack per archiviare i valori in?

Quando sovraccarico < < operatore e provo a stampare gli elementi ottengo un numero negativo follemente grande:

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

Sono lontana e ho bisogno di qualche indizio se qualcuno ha il tempo!

È stato utile?

Soluzione

In sovraccarico < < operatore nel ciclo for stai ripetendo i tempi massimi. Ma potresti non aver inserito gli elementi maxsize nello stack. Dovresti ripetere i tempi migliori. Inoltre, scrivi un costruttore predefinito per la struttura degli oggetti e inizializza tutte le varianti in modo da non ottenere valori di immondizia quando provi a stamparle.

Altri suggerimenti

Quando si stampa la pila, si dovrebbe solo andare verso l'alto, non fino a maxSize.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top