سؤال

ويا كل شيء! وجود صعوبة تذكر مع كومة بلدي. ايم محاولة لطباعة كل عنصر أنني قد دفعت إلى المكدس.

وبدءا من المنشئ كومة نحن نعرف أن لدينا حجم ثابت للمجموعة. لذلك أنا تخصيص عناصر البنية تعترض على عقد مجرد أن مساحة كبيرة:

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

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

نعم، البنود هو نوع البنية من "البند" الكائن. ننظر لها:

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

أولا وformost نريد أن نضيف إلى المكدس عن طريق دفع كل عنصر من عناصر واردة في مجموعة 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;
}

ونعم القضية الحقيقية بالنسبة لي هي العناصر [++ الأعلى] .N = ن. بيان. لقد تم في محاولة لمعرفة كيف يمكن سحب (+) عناصر مجموعة لمعرفة ALL من عناصر مجموعة بعد أن دفع إلى المكدس.

وايم أتساءل لماذا أنا غير قادر على سحب أن البنود [++ الأعلى] .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;
}

وأنا بعيدا وانا بحاجة الى بعض ردهات إذا كان أي شخص لديه الوقت!

هل كانت مفيدة؟

المحلول

في ل<< مشغل طاقتها في الأوقات ماكس سايز للحلقة كنت بالتكرار. ولكن قد لا يكون دفعت عناصر ماكس سايز إلى المكدس. يجب تكرار أعلى مرات. أيضا، إرسال بريد المنشئ الافتراضي للبنية البند وتهيئة جميع variblaes بحيث أنك لا تحصل على القيم القمامة عند محاولة طباعتها.

نصائح أخرى

عند طباعة المكدس، يجب عليك ان تذهب فقط إلى أعلى، لا ترقى إلى ماكس سايز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top