2012-02-16 7 views
1

グリーティングスタックオーバーフローコミュニティ。私は、スタック内のすべての値をポップアップして追加し、それらを戻すことができる関数を作成しようとしています。私はこれまで、ローカル変数に2回ポップするだけで、2つの値を加算、減算、除算、および乗算し、操作を実行してから完了した値をプッシュバックすることで成功しました。しかし、私はそれが空になるまでスタックからポップする必要があります。スタックからすべての値をポップし、それらをすべての値の合計としてプッシュバックする方法はありますか?

2つの値をポップして結果を戻すループを追加しようとしました。これは私が心

push these numbers 1 , 2 , 3, 4 ,5 
pop 5 
pop 4 
add 5 + 4 = 9 
push 9 
stack (1,2,3,4,9) 
pop 9 
pop 4 
add 9+4 = 13 
push 13 

などに持っているものです。私は、ループのisEmpty関数を使用して試して、値の1つがNULLでないときに停止するようにしようとしました。しかし、ループを停止または開始する方法がわからないので、ループが空になるまで継続します。ここに私が書いたものがあります。

void MathStack::addAll() 
{ 
    int num = 0,num2 = 0, sum = 0; 

    while(!isEmpty()) 
    { 
    //Pop the first two values off the stack. 
    pop(num); 
    cout << "Popping " << num << "\n"; 
    pop(num2); 
    cout << "Popping " << num2 << "\n"; 

    //Add the two values, store in sum. 
    sum = num + num2; 
    cout << "Sum is " << sum; 
    //Push sum back onto the stack. 
    push(sum); 
    num =0; 
    num2 = 0; 
    } 


} 

お勧めはありますか?

答えて

2

中間合計をスタックに戻す理由はありません。ただ、現地での和を維持し、時間でスタック1のオフ値をポップ:

void MathStack::addAll() 
{ 
    int num = 0, sum = 0; 

    while(!isEmpty()) 
    { 
     pop(num); 
     sum += num; 
    } 

    push(sum); 
} 
+0

あなたは正しいです!私はそれが私に来ないとは信じられません。どうもありがとうございました。今働いている。 – falnir

0

問題は、スタックにの1つがある場合にループを中断したいということです。という項目があります。

あなたは3項目のスタックで始まる想像:

4 
8 
2 

あなたはあなたのループ、ポップ4と8を実行して、今すぐ12を押して、あなたが持っている:

12 
2 

あなたがもう一度あなたのループを実行します、ポップ12と2、今あなたが持っている14をプッシュ:あなたは二回ポップに行くよう

14 

スタックは、空ではありません...

の直後にpop(ループ状態にあるコールに加えて)の後にisEmpty()に電話をかけたいとします。スタックが空であることがわかった場合、スタック全体の合計はnumの値になります。

+0

私が参照してください。どうもありがとうございました。 – falnir

関連する問題