Pregunta

¡Hola a todos! Tener un pequeño problema con mi pila. Estoy tratando de imprimir cada elemento que he insertado en la pila.

Comenzando con el stack ctor, sabemos que tenemos un tamaño fijo para la matriz. Así que asigno el objeto de estructura de elementos para contener tanto espacio:

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

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

Sí, items es un tipo de estructura del objeto " item " ;. Echa un vistazo:

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

En primer lugar, queremos agregar a la pila empujando cada elemento entrante en la 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;
}

Sí, el verdadero problema para mí son los elementos [++ top] .n = n; declaración. He estado tratando de descubrir cómo puedo arrastrar (+) la matriz de elementos para ver TODOS los elementos de la matriz después de presionar en la pila.

Me pregunto por qué no puedo arrastrar esos elementos [++ arriba] .n = n declaración cuando estoy depurando. Todo lo que surge es el valor que se pasa como un parámetro 'n'. ¿Necesito usar una matriz de tipo de objeto de pila para almacenar los valores?

Cuando sobrecargo el < < operador e intento imprimir los elementos obtengo un número negativo increíblemente 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;
}

¡Estoy lejos y necesito orientación si alguien tiene tiempo!

¿Fue útil?

Solución

En el sobrecargado < < operador en el bucle for estás iterando maxsize times. Pero es posible que no haya insertado elementos maxsize en la pila. Deberías repetir los mejores tiempos. Además, escriba un constructor predeterminado para la estructura del elemento e inicialice todas las variables para que no obtenga valores basura cuando intente imprimirlos.

Otros consejos

Al imprimir la pila, solo debe ir al principio, no a maxSize.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top