Implementazione dello stack C ++
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!
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.