我必须递归地反转堆栈。 使用相同的堆栈。
void reverse(stack<int> *s)
{
if(s->empty())
return;
int element= s->top();
s->pop();
reverse(s);
s->push(element);
}
答案 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();
}