如何仅用递归函数和栈操作逆序一个栈

如何仅用递归函数和栈操作逆序一个栈

问题描述:

  现给一个栈,请仅使用递归函数和栈操作逆序该栈,不可使用其他数据结构!

问题分析:

  假设现在栈中数据为5-4-3-2-1(栈顶至栈底,下文若无特殊说明,都为栈顶至栈底),我要将这个栈逆序,使其中数据变为1-2-3-4-5;那么首先push进栈的应该为5,其次是4,其次3,其次2,最后是1。
  现在知道了目标栈的插入顺序,那么该进行流程的设计,插入的顺序为5,4,3,2,1,有人会说,这还不简单:我连递归函数都不用写,直接将原始栈逐一pop,再push进目标栈不就好了。
  如果有这个想法,可能就是没仔细读题了。题中说不可使用其他数据结构,那么就不应该再创建另一个栈,而是在原先的栈上进行操作。
  这个插入操作很容易想到是使用递归来完成,那么插入应该在调用递归函数之前还是之后呢?如果在之前,那么第一次递归函数就应该将5插入空栈,问题来了,5可以获得,但是栈怎么变空、变空之后其他的数据该怎么保存呢?
  那么现在将插入放在调用递归之后,这个递归函数实际执行的操作顺序应该为1,2,3,4,5。插入5时候必须是空栈,那我们可以这样设计,每次获取并删除底元素,这样不仅能够得到栈内元素,也可以在最后调用的5时变为空栈。
  该如何获取栈底元素呢?因为不可以使用其他的数据结构,我们很容易想到用递归的方法来保存数据。现在思路已经明晰,需要两个递归函数,一个用来获取栈底元素,一个用来插入

代码实现:

import java.util.Stack;

public class Reverse_Stack {
   
    //创建一个栈,用该栈进行测试
    private static Stack<Integer> stack = new Stack<>();
    //该函数用来获取栈底元素同时删除栈底元素
    public 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值