首页 > 代码库 > 只使用递归实现栈的逆序操作
只使用递归实现栈的逆序操作
2017-06-23 20:36:02
刚开始思考这个问题的时候陷入了一个误区,就是以为只能用一个递归完成。
然而事实上,可以使用两个递归来完成这个功能。
具体思考是这样的,首先递归其实是将问题规模缩小了,每次处理更小的问题。针对这题来说,更小的问题应该是去除底部那个数后的逆序再加上最后的数。
当然,你可能会问,什么不是去掉最上面的数,然后将它再放到最前面,理由很简单,栈是一种后进先出的数据结构,这种类型的数据结构适合的是在尾部添加数据,而非在首部添加数据,所以更清晰的或者说更适合栈的操作是先把底部数据remove,再对栈进行逆序操作,最后将它再push进末尾。
因此,核心操作就两个,一个是remove底部数据,二是reverse。
int getlast(stack<int>& s) { if(s.empty()) {cout<<"当前栈为空"<<endl;exit(0);} else { int temp=s.top(); s.pop(); if(s.empty()) return temp; else { int t=getlast(s); s.push(temp); return t; } } } void reverse(stack<int>& s) { if(s.empty()) return ; else { int temp=getlast(s); reverse(s); s.push(temp); } }
只使用递归实现栈的逆序操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。