스택을 재귀 적으로 되돌려 야합니다. 같은 스택을 사용합니다. 잘 모르겠어요C++의 재귀 함수에 대한 참조로 내장 스택 전달 방법
void reverse(stack<int> *s)
{
if(s->empty())
return;
int element= s->top();
s->pop();
reverse(s);
s->push(element);
}
스택을 재귀 적으로 되돌려 야합니다. 같은 스택을 사용합니다. 잘 모르겠어요C++의 재귀 함수에 대한 참조로 내장 스택 전달 방법
void reverse(stack<int> *s)
{
if(s->empty())
return;
int element= s->top();
s->pop();
reverse(s);
s->push(element);
}
코드에서 당신은 그 위에서 하나를 제거 상단에 넣어, 말도 안돼, 배열 또는 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();
}
코드 예제가 도움이 될까요? – sarin
@wedo 감사합니다! 나는 내가 원하는 것을 얻는다, 그것은 정말로 도움이된다. –
'무효 역 (스택 & S)' –
Borgleader
내가 볼 수없는, 문제 것입니다. 알고리즘 또는 포인터를 사용하여 C + + 구문/참조? – Youda008
가장 큰 문제는 스택이 reverse() 함수에 의해 되돌려지지 않는다는 것입니다. 그것을 직시 : 스택을 아래로 이동하여 요소를 터뜨린 다음 역순으로 밀어서 같은 스택에 결과를 얻습니다. 이 문제에 대한 해결책을 원한다면 문제가 명확하지 않습니다. – stefaanv