stackの中の要素を再帰的に反転する


Reverse a stack using recursion
問題はstackの中の要素を反転することを説明して、while,forのこのような循環機構を使うことができなくて、stackのいくつかの操作だけを使うことを許可して、例えば:empty(S)push(S)pop(S)
solution:この問題を解決するには2つの再帰関数を使用する必要があります.最初の再帰関数は、stackが空になるまで、stack内の各要素をパスから下に移動します.
S1 –>
S2–>
S3–>
S4–>
S5–>
1 2 345
12345
12345
12345
12345
2番目の再帰関数は、stackの最後の要素から順に、各要素をstackの下部に挿入します.
S10
54321
15432
12543
12354
12345
コードは次のとおりです.
void insertBottom(Stack &stk, int val)
{
        if(stk.empty())
        {
                stk.push(val);
                return;
        }else{
                int temp = stk.top();
                stk.pop();
                insertBottom(stk, val);
                stk.push(temp);
                return;
        }
}

void reverse(Stack &stk)
{
        if(!stk.empty())
        {
                int temp = stk.top();
                stk.pop();
                reverse(stk);
                insertBottom(stk, temp);
        }
        return;
}

完全なコード:
#include 

using namespace std;

class Stack{
public:
        Stack(int n){
                num = n;
                arr = new int[n]();
                t = -1;
        }

        ~Stack(){
                delete [] arr;
        }

        bool empty()
        { return t<0; }

        void push(int val)
        {
                t++;
                if(t >= num)
                {       cout<<"the stack is full"<return; 
                }else
                        arr[t] = val;
                return;
        }

        void pop()
        {
                if( t<0 )
                {       cout<<"the stack is empty, can't pop'"<return;
                }else
                        t--;
        }

        int top()
        {
                if(t<0)
                {       cout<<"the stack is empty";
                        return -1;
                }else
                        return arr[t];
        }

public:
        int *arr;
private:
        int num;
        int t;
};

void print(Stack &stk)
{
        if(!stk.empty())
        {
                int temp = stk.top();
                cout<else{
                cout<return;
}

void insertBottom(Stack &stk, int val)
{
        if(stk.empty())
        {
                stk.push(val);
                return;
        }else{
                int temp = stk.top();
                stk.pop();
                insertBottom(stk, val);
                stk.push(temp);
                return;
        }
}

void reverse(Stack &stk)
{
        if(!stk.empty())
        {
                int temp = stk.top();
                stk.pop();
                reverse(stk);
                insertBottom(stk, temp);
        }
        return;
}


int main()
{
        int arr[] = {
    6,5,4,3,2,1};
        Stack stk(10);
        for(int i = 0; i<6; ++i)
                stk.push(arr[i]);
        print(stk);
        reverse(stk);
        print(stk);
}