Pergunta

Olá a todos! Tendo um pequeno problema com a minha stack. Im tentando imprimir cada elemento que eu já colocados na pilha.

A partir da ctor pilha sabemos que temos um tamanho fixo para a matriz. Então eu alocar os itens struct objeto a espera só que muito espaço:

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

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

Sim, itens é um tipo struct do "item" objeto. Dê uma olhada:

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

Em primeiro formost queremos adicionar à pilha, empurrando cada elemento de entrada na matriz 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;
}

Sim, a verdadeira questão para mim é os itens [++ top] .n = n; declaração. Eu estive tentando descobrir como eu pode arrastar (+) a matriz de itens para fora para ver todos os elementos do array depois de eu empurrar para a pilha.

Im perguntando por que eu não posso arrastar que os itens [++ top] .n = n declaração quando im depuração. Tudo o que vem à tona é o valor que é passado como um paramater 'n'. Eu preciso usar uma matriz pilha objeto do tipo para armazenar os valores em?

Quando eu sobrecarregar o operador << e tente imprimir os elementos que recebo um número negativo insanamente 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;
}

Eu sou maneira fora e eu preciso de alguma orientação, se alguém tiver o tempo!

Foi útil?

Solução

No << operador sobrecarregado nos tempos MAXSIZE loop for que você está iteração. Mas você não pode ter empurrado elementos MAXSIZE na pilha. Você deve interagir top vezes. Além disso, escrever um construtor padrão para a estrutura do item e inicializar todas as variblaes para que você não obter valores de lixo quando você tenta imprimi-los.

Outras dicas

Ao imprimir a pilha, você só deve ir até superior, não até maxSize.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top