代码:
#include <iostream>#include <stack>
using namespace std; int g_a_r_l_e(stack<int>&stackdata)//取栈顶元素并在栈中将其删除; //注意这里转引用,如果不传引用每次递归会传入不同的stack,这样会出现错误 {
int top_val = stackdata.top();
stackdata.pop();
if(stackdata.empty()){ return top_val;
} else{
int last = g_a_r_l_e(stackdata);
stackdata.push(top_val);
return last;
}
} void reverse(stack<int>&stackdata)//每次递归都是取执行完g_a_r_l_e()的返回值,
//直到stackdata.empty=1,这时把g_a_r_l_e()的返回值入栈
{
if(stackdata.empty()){
return ;
}
else{ int i = g_a_r_l_e(stackdata);
reverse(stackdata);
stackdata.push(i);
} }
int main()
{ stack<int>stackdata1;
int a[]={1,2,3,4,5,6};
for(int i=0;i<6;i++)
{
stackdata1.push(a[i]);
} reverse(stackdata1);
cout<<"逆序后栈数据:"<<endl;
//遍历逆序后的栈
while(!stackdata1.empty()){
int tp = stackdata1.top();
std::cout << tp << '\n';
stackdata1.pop();
} } 结果: