如何将Inbuilt堆栈作为参考传递给c ++中的递归函数

时间:2014-12-22 14:19:36

标签: c++ reference

我必须递归地反转堆栈。 使用相同的堆栈。

void reverse(stack<int> *s)
{

  if(s->empty())
    return;
 int element= s->top();
  s->pop();
  reverse(s);
  s->push(element);

}

1 个答案:

答案 0 :(得分:0)

我不确定LIFO结构是否可行,在您的代码中,您从顶部删除一个然后将其放在顶部,没有意义,可能使用数组或其他堆栈作为参数。为了把东西放在第一个位置,堆栈需要为空,或者你可以实现PushAtBottom方法,但我想它不再是堆栈,你需要使用你自己的堆栈。

示例:

#include<iostream>
template<class s>
class stack
{
        int top;
        s* Array;
        int counter;
public:
    stack(){
        top = 0;
        Array = new s[10];
        counter = 0;
    }
    s Pop(){
        if(top!=0){
            s rTop = Array[top];
            Array[top] = NULL;
            top--;
            return rTop;
        }
        return NULL;
    }
    void Push(s item){
        top++;
        Array[top] = item;
    }
    void PushAtBottom(s item){
        for(int i=top;i>counter;i--)
        {
            Array[i+1] = Array[i]; 
        }
        Array[++counter] = item;
        top++;
    }
    bool empty(){
        if(top!=0)
            return false;
        return true;
    }
    bool reverse_done(){ //funtion that stops recursion
        if(counter >= top)
            return true;
        return false;
    }
};

void stack_reverse(stack<int> *s){
    if(s->reverse_done())
        return;
    s->PushAtBottom(s->Pop());
    stack_reverse(s);

}

void main(){

    stack<int> * s = new stack<int>();
    s->Push(1);
    s->Push(2);
    s->Push(3);
    stack_reverse(s);
    std::cout << s->Pop();
    std::cout << s->Pop();
    std::cout << s->Pop();
}