题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。
只消两个递归即可,直接看代码吧!
#include<iostream>
#include<stack>
using namespace std;
template <typename T>
void AddToStackButtom(stack<T> &Stack, T t)
{//将元素t加入栈底,递归调用
if(Stack.empty())
Stack.push(t);
else
{
T top = Stack.top();
Stack.pop();
AddToStackButtom(Stack, t);
Stack.push(top);
}
}
template <typename T>
void ReverseStack(stack<T> &Stack)
{//颠倒栈,递归调用自己
if(!Stack.empty())
{
T top = Stack.top();
Stack.pop();
ReverseStack(Stack);
AddToStackButtom(Stack, top);
}
}
int main()
{
stack<int> Stack;
for(int i=1; i<=5; i++) //压入元素 1 2 3 4 5,其输出序列应为 5 4 3 2 1
Stack.push(i);
ReverseStack(Stack); //颠倒栈,之后输出序列为 1 2 3 4 5
while(!Stack.empty())
{
cout<<Stack.top()<<endl;
Stack.pop();
}
system("pause");
return 0;
}