Вопрос

Всем привет!У меня небольшая проблема с моим стеком.Я пытаюсь распечатать каждый элемент, который я положил в стек.

Начиная с вектора стека, мы знаем, что у нас есть фиксированный размер массива.Поэтому я выделяю объект структуры items так, чтобы он вмещал ровно столько места:

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

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

Да, items — это тип структуры объекта «item».Взгляни:

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

Прежде всего, мы хотим добавить в стек, помещая каждый входящий элемент в массив 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;
}

Да, настоящая проблема для меня — это items[++top].n = n;заявление.Я пытался выяснить, как я могу перетащить (+) массив элементов, чтобы увидеть ВСЕ элементы массива после того, как я поместил их в стек.

Мне интересно, почему я не могу перетащить этот оператор items[++top].n = n во время отладки.Все, что появляется, — это значение, передаваемое как параметр «n».Нужно ли мне использовать массив типов объектов стека для хранения значений?

Когда я перегружаю оператор << и пытаюсь напечатать элементы, я получаю безумно большое отрицательное число:

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

Я далеко, и мне нужен совет, если у кого-то есть время!

Это было полезно?

Решение

В перегруженном операторе << в цикле for вы выполняете итерацию максимального размера.Но вы, возможно, не поместили элементы maxsize в стек.Вам следует повторить лучшие результаты.Кроме того, напишите конструктор по умолчанию для структуры элементов и инициализируйте все переменные, чтобы не получать мусорные значения при попытке их распечатать.

Другие советы

При печати стопки вы должны идти только вверх, а не до maxSize.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top