码迷,mamicode.com
首页 > 其他好文 > 详细

只使用递归实现栈的逆序操作

时间:2017-06-23 22:09:16      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:ack   应该   exit   oid   个数   tac   eve   数据结构   blog   

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);
    }
}

 

只使用递归实现栈的逆序操作

标签:ack   应该   exit   oid   个数   tac   eve   数据结构   blog   

原文地址:http://www.cnblogs.com/TIMHY/p/7071627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!