递归反转输出字符串(不改变字符串本身)——分别用链表和动态数组两种数据结构来实现.C

本文介绍了如何使用递归方法反转输出字符串,分别通过动态数组和链表两种数据结构来实现。在动态数组实现中,利用malloc和realloc读取并存储输入字符,遇到换行符结束;链表实现则采用尾插法建立单向链表。递归公式的推导过程中,通过逐层退栈实现字符串反转。文章提供了详细的代码实现及测试结果。
摘要由CSDN通过智能技术生成

递归方法虽然写起来简单,但递归公式的寻找可比想到首尾递进互换的方法难太多了,想了很长时间才想出来,初学小菜鸡,在这里回顾一下解题思路。

动态数组的实现:使用malloc函数申请初始大小为N的一片堆空间,使用getchar函数循环读取标准输入缓冲区的字符并存入申请的空间中,当空间被占满时使用realloc函数扩容然后继续读取并写入,遇到换行符时停止读取,在最后一个字符后追加‘\0‘并退出循环。

链表的实现:使用单向链表即可,使用getchar循环读取标准输入缓冲区的字符并使用尾插法建立链表,表尾元素的pNext指针指向NULL。

递归公式的推导:字符串存储下来之后,经过观察,如果要将n个字符反转输出,需要先将后n-1个字符整体反转输出然后输出第1个字符,同理,要将后n-1个字符反转输出,需要先将其后n-2个字符反转输出然后输出第2个字符,以此类推直到反转最后一个字符时将最后一个字符直接打印输出即可结束递归,函数逐层退栈连环打印实现反转输出。

以“ABCDE”为例,定义一个reverse()函数,递归公式可表示为reverse("ABCDE") = reverse("BCDE") + 'A' = reverse("CDE") + 'B' + 'A' = reverse("DE") + 'C' + 'B' + 'A' = reverse('E') + 'D' + 'C' + 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值