代码:
#include <iostream>
#include <stack>
using namespace std;
#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()){
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;
}
}
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{
//直到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);
}
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]);
}
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 << ' ';
stackdata1.pop();
}
cout<<"逆序后栈数据:"<<endl;
//遍历逆序后的栈
while(!stackdata1.empty()){
int tp = stackdata1.top();
std::cout << tp << ' ';
stackdata1.pop();
}
}
结果: