您的位置:首页 > 其它

1_3仅用递归函数和栈操作逆序一个栈

2016-12-26 11:35 267 查看
1. 题目:仅用递归和栈提供的操作来实现对栈的逆序

2. 思路:除了书中列出的方法,我在想可不可以直接把一个栈中的元素一次弹出放入另一个辅助栈中,实现对栈的逆序(缺点是,需要辅助栈空间)。所以,用C++实现了书中的方法,并且实现了一下我自己的想法 (包含在#if 0 ...#endif之间的代码)。

3. Answer:

#include<stack>
using namespace std;

#if 0
template<typename T>
void reverseCore(stack<T> &stack1, stack<T> &stack2)
{
if (stack1.size()==0)
{
return;
}
else
{
T&top = stack1.top();
stack1.pop();
stack2.push(top);
reverseCore(stack1, stack2);
}
}
template<typename T>
void reverse(stack<T> &stack1)
{
stack<T> stack2;
if (stack1.size() == 0)
{
return;
}
else
{
reverseCore(stack1, stack2);
stack1 = stack2;
}
}
#endif

template<typename T>
T& getAndRemoveLastElement(stack<T> &stack)
{
T result = stack.top();
stack.pop();
if (stack.size() == 0)
{
return result;
}
else
{
int last = getAndRemoveLastElement(stack);
stack.push(result);
return last;
}
}
template<typename T>
void reverse(stack<T> &stack)
{
if (stack.size() == 0)
{
return;
}
else
{
int i = getAndRemoveLastElement<T>(stack);
reverse(stack);
stack.push(i);
}
}

int main()
{
stack<int> stack1;

for (int i = 0; i < 5;i++)
{
stack1.push(i);
}

printf("stack1 top: %d\n", stack1.top());
reverse<int>(stack1);
printf("stack2 top: %d", stack1.top());
system("pause");
return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: