《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-9(question?)
来源:互联网 发布:php分前后端吗 编辑:程序博客网 时间:2024/06/08 08:12
【例10-9】编写一个函数reverse(char *s),实现将字符串s的内容就地逆置。要求用递归方法实现。
【分析】
在例题10-4中介绍了reverse()的非递归解法
【例10-4】编写一个函数reverse(char *s),实现将字符串s的内容逆置。例如,原字符串的内容为abcd,逆置后变为dcba。要求不另外开辟字符串空间。
【分析】
首先要将字符串保存在一个字符数组中,并将它的首地址作为函数reverse()c参数传递。在函数reverse()中,要实现将字符串内容的就地逆置(不另外开辟字符串空间),可以设置两个指针,分别指向字符串的首尾。然后将这两指针指向的位置互换,再将靠近字符串首的指针后移,靠近字符串尾的指针前移。重复上述操作,直到指针重合或者尾指针大于前指针(指针过界)为止。
下面给出完整的测试程序,程序清单10-4
#include "stdio.h"
void reverse(char *s)
{
int len = strlen(s)-1,i=0;
char tmp;
while(i!=len && i<len)
{
tmp = s[i];
s[i] = s[len];
s[len] = tmp;
i++;
len--;
}
}
main()
{
char s[]="abcdefgh";
printf("The string is %s\n",s);
reverse(s);
printf("The reversed string is %s\n",s);
getche();
}
。
但这里要求使用递归方法实现。可以仿照上一例题的做法,设len=strlen(s)-1,i=0。首先进行s[i]和s[len]的内容的置换,然后i自增1,len自减1.重复上述操作,这个过程用递归方法来实现,知道i的值等于len的值(当字符串中字符的个数为奇数),或者i的值大于len的值(当字符串中字符的个数为偶数)为止。算法描述如下:
void reverser(char *s,int len,int i)
{
char tmp;
if(i<len)
{
tmp = s[len];
s[len] = s[i];
s[i] = tmp;
reverser(s,len-1,i+1);
}
}
void reverse(char *s)
{
int len = strlen(s);
len--;
reverser(s,len,0);
}
函数reverse()是一个启动函数,它调用真正的递归函数reverser(),这样符合题目的要求,同时与例题10-4中的reverse()过程接口一致,易于软件的移植。在递归函数reverser()中,当i小于len时,就将s[len]的内容与s[i]的内容交换位置,然后递归地调用reverser()函数,此时参数len减1,参数i加1,。这个递归过程直到i>=len时结束。
下面给出完整的测试程序,程序清单10-9
#include "stdio.h"
void reverser(char *s,int len,int i)
{
char tmp;
if(i<len)
{
tmp = s[len];
s[len] = s[i];
s[i] = tmp;
reverser(s,len-1,i+1);
}
}
void reverse(char *s)
{
int len = strlen(s);
len--;
reverser(s,len,0);
}
main()
{
char s[]="abcdefg";
printf("The original string is %s\n",s);
reverse(s);
printf("The reversed string is %s\n",s);
getche();
}
本程序的运行结果如图所示
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-9(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-10(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-2(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-3(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-4(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-5(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-6(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-7(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-8(question?)
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-1
- 面试复习-------算法与数据结构------算法设计
- Stanford公开课之算法:设计与分析——(第一周) Programming Question-1
- Stanford公开课之算法:设计与分析——(第四周) Programming Question-4
- 妙趣横生的算法-图
- 数据结构与算法之常见的算法笔试题
- 妙趣横生的算法之二叉树的创建与遍历
- 妙趣横生的算法之栈的操作
- 妙趣横生的算法之队列的操作
- (5)c21并发 练习2
- 重载数组下标操作符,使用operator
- PVCBOT【19号】漫舞者--折叠滑步机器人
- java葵花宝典中的宝典!
- jpegsrc.v6b.tar.gz,gd-2.0.33.tar.gz,libiconv-xxxx.tar.gz,libpng-xxxx.tar.gz安装方法
- 《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-9(question?)
- PVCBOT【20号】机械螃蟹--横向爬行机器人
- PVCBOT【21号】挑战者--人形机甲战士
- GCC编译器
- Excel中如何保持两个单元格数值相同
- Android NDK Makefile
- 简单配置让您的无线小路由变成无线交换机
- 简单配置让您的无线小路由变成无线交换机
- PVCBOT【22号】信步者--多足步履机械兽