我必須遞歸地反轉堆棧。 使用相同的堆棧。如何將內置堆棧作爲參考傳遞給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);
}
我不知道是可能的LIFO結構,在你的代碼中刪除一個從頂部然後把它放到最上面,是沒有意義的,可能工作使用數組或其他堆棧parametar。爲了把東西放在第一位置堆棧需要是空的,或者你可以實現方法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謝謝!!我得到我想要的東西,這真的很有幫助。 –
'void反轉(堆棧&S)' –
Borgleader
我不明白,你有什麼問題。使用指針/引用的C++的算法或語法? – Youda008
你最大的問題是你的棧沒有被reverse()函數取消。面對它:沿着堆棧彈出元素,然後反向推動它們會得到相同的堆棧。如果你想爲此提供解決方案,那麼你的問題就不清楚了。 – stefaanv