实现栈的逆序 递归 不申请额外的数据结构

上次有说明如何删除栈中指定位置的元素并且不破坏栈结构。主题思想是递归的压出栈顶元素,直到压出指定位置的元素,然后把存贮在递归过程中堆区的栈顶元素依次压回栈,最后返回删除的元素的值。

详情请通过该链接查看点击打开链接

栈的逆序可以利用该函数(get_stack())来实现。

例:1,2,3,4。栈顶元素是4。

思路

反转1,2,3,4。相当于,取出(get_stack())栈底元素1,将2,3,4反转为4,3,2。然后压入1。

反转2,3,4。相当于,取出(get_stack())栈底元素2,将3,4反转为4,3。然后压入2。

反转3,4。相当于,取出(get_stack())栈底元素3,将4反转为4。然后压入3。

反转4。相当于,取出(get_stack())栈底元素4,此时栈空。

依次压入4,压入3,压入2,压入1。栈反转结束。


上述思路可以用递归来实现。

先贴上流程图,以1,2,3,4。4为栈顶元素为例。


下面是代码:

函数1:获取、删除栈底元素。

int get_stack(stack<int >&a){
    int result=a.top();
    a.pop();
    if(a.empty())
    {
        return result;
    }
    else
    {
        int i=get_stack(a);
        a.push(result);
        return i;
    }
}

函数2:递归反转。

void reverse(stack<int >&a){
    if(a.empty())
        return ;
    int i=get_stack(a);
    reverse(a);
    a.push(i);
    return ;
}

调试:这里是4,3,2,1。 1为栈顶。



运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值