質問

おいおい!スタックに少し問題があります。スタックにプッシュした各要素を印刷しようとしています。

スタックアクターから始めて、配列のサイズが固定されていることがわかります。したがって、items structオブジェクトを割り当てて、その分だけのスペースを保持します。

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」パラメータとして渡される値のみです。スタックオブジェクトタイプの配列を使用して値を格納する必要がありますか?

&lt;&lt;をオーバーロードした場合演算子と要素を印刷しようとすると、非常に大きな負の数が得られます:

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

もうすぐです。時間があれば誰かの指導が必要です!

役に立ちましたか?

解決

過負荷の&lt;&lt; forループ内の演算子は、maxsize回反復しています。ただし、maxsize要素をスタックにプッシュしていない場合があります。トップタイムを繰り返す必要があります。また、アイテム構造のデフォルトコンストラクターを記述し、すべての変数を初期化して、印刷しようとするときにガベージ値が取得されないようにします。

他のヒント

スタックを印刷するときは、maxSizeまでではなく、最上位までしか移動しないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top