算法之使用递归实现栈翻元素转(C++)

问题描述

通过递归函数实现栈元素翻转。例如:stack={1,2,3,4,5} ,将栈中的元素返回之后,变为stack={5,4,3,2,1};

实现方式

利用递归函数的调用栈存储栈中的每一个元素。只要实现先pop的元素,最后push即可。

  1. 可以利用递归方法的调用栈,获取栈底元素。
  2. 将stack中的数据,依次从栈底拿出。然后最后push到栈中即可。
//方法声明
//遍历打印栈中元素
void printStack(stack<int>* _stack);
//获取当前栈中,栈底的元素
int getBottomElment(stack<int>* _stack);
//实现当前栈的元素翻转操作
void reverseStack(stack<int>* _stack);



void printStack(stack<int>* _stack){
    while (!_stack->empty()) {
       cout << _stack->top() << endl;
        _stack->pop();
    }
}

/**
 * 获得栈底部元素
 */
int getBottomElment(stack<int>* _stack){
    int result = _stack->top();
    _stack->pop();
    if(_stack->empty()){
        return result;
    }
    int last = getBottomElment(_stack);
    _stack->push(result);
    return last;
}


/**
 *要想实现栈的翻转,保证后先拿到数据,最后push到栈中
 */
void reverseStack(stack<int>* _stack){
    if(_stack->empty()){
        return;
    }
    int last = getBottomElment(_stack);
    reverseStack(_stack);
    _stack->push(last);
}
运行测试
int main(int argc, const char * argv[]) {
    //初始化一个栈
    stack<int>* _stack = new stack<int>();
    _stack->push(1);
    _stack->push(2);
    _stack->push(3);
    _stack->push(4);
    reverseStack(_stack);
    printStack(_stack);
    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值