用递归函数和栈操作逆序一个栈
Posted 一步一个脚印
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用递归函数和栈操作逆序一个栈相关的知识,希望对你有一定的参考价值。
代码:
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 << \'\\n\';
stackdata1.pop();
}
cout<<"逆序后栈数据:"<<endl;
//遍历逆序后的栈
while(!stackdata1.empty()){
int tp = stackdata1.top();
std::cout << tp << \'\\n\';
stackdata1.pop();
}
}
结果:
以上是关于用递归函数和栈操作逆序一个栈的主要内容,如果未能解决你的问题,请参考以下文章