2014-12-22 3 views
-1

스택을 재귀 적으로 되돌려 야합니다. 같은 스택을 사용합니다. 잘 모르겠어요C++의 재귀 함수에 대한 참조로 내장 스택 전달 방법

void reverse(stack<int> *s) 
{ 

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

} 
+1

'무효 역 (스택 & S)' – Borgleader

+0

내가 볼 수없는, 문제 것입니다. 알고리즘 또는 포인터를 사용하여 C + + 구문/참조? – Youda008

+1

가장 큰 문제는 스택이 reverse() 함수에 의해 되돌려지지 않는다는 것입니다. 그것을 직시 : 스택을 아래로 이동하여 요소를 터뜨린 다음 역순으로 밀어서 같은 스택에 결과를 얻습니다. 이 문제에 대한 해결책을 원한다면 문제가 명확하지 않습니다. – stefaanv

답변

0

코드에서 당신은 그 위에서 하나를 제거 상단에 넣어, 말도 안돼, 배열 또는 parametar 같은 다른 스택을 사용하여 작동 할 수 있습니다, 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(); 
} 
+0

코드 예제가 도움이 될까요? – sarin

+0

@wedo 감사합니다! 나는 내가 원하는 것을 얻는다, 그것은 정말로 도움이된다. –

관련 문제