专升本数据结构试题解析(21)

时间:2025-07-10

第2部分 习题解析 亱店↘打烊oO

【算法源代码】

int index(char s[ ], char t[ ],int m,int n)

{int i=0,j=0;

while (i<=m-n && j<=n-1)

if (s[i]==t[j]){i++;j++;} /*对应字符相等,指针后移*/

else {i=i-j+1;j=0;} /*对应字符不相等,i回溯,j仍为0*/

if(i<=m-n && j==n)

{printf("t在s串中位置是%d",i-n+1);

return(i-n+1);

}/*匹配成功*/

else return(0); /*匹配失败*/

}

2.函数void insert(char*s,char*t,int pos)将字符串t插入到字符串s中,插入位置为pos。请用c语言实现该函数。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)

【算法分析】

本题是字符串的插入问题,要求在字符串s的pos位置,插入字符串t。首先应查找字符串s的pos位置,将第pos个字符到字符串s尾的子串向后移动字符串t的长度,然后将字符串t复制到字符串s的第pos位置后。

对插入位置pos要验证其合法性,小于1或大于串s的长度均为非法,因题目假设给字符串s的空间足够大,故对插入不必判溢出。

【算法源代码】

void insert(char *s,char *t,int pos)

/*将字符串t插入字符串s的第pos个位置*/

{

int i=1,x=0,j; char *p=s,*q=t; /*p,q分别为字符串s和t的工作指针*/

if(pos<1)

{printf("pos参数位置非法\n");exit(0);}

while(*p!='\0'&&i<pos) {p++;i++;} /*查pos位置*/

if(*p=='/0')

{printf("%d位置大于字符串s的长度",pos);exit(0);}

else /*查找字符串的尾*/

while(*p!= '/0')

{p++; i++;} /*查到尾时,i为字符'\0'的下标,p也指向'\0'*/

while(*q!= '\0')

{q++; x++; } /*查找字符串t的长度x,循环结束时q指向'\0'*/

for(j=i;j>=pos ;j--)

{*(p+x)=*p; p--;}/*串s的pos后的子串右移,空出串t的位置*/

q--; /*指针q回退到串t的最后一个字符

for(j=1;j<=x;j++) *p--=*q--; /*将t串插入到s的pos位置上*/

}

3.设计一个算法,统计在输入字符串中各个不同字符出现的频度。(字符串中的合法字符为'A'-'Z'这26个字母和'0'-'9'这10个数字)。

【算法分析】

由于字母共26个,加上数字符号10个共36个,所以设一长36的整型数组,前10个分量存放数字字符出现的次数,余下存放字母出现的次数。从字符串中读出数字字符时,字符的ASCII代码值减去数字字符'0'的ASCII代码值,得出其数值(0..9),字母的ASCII代码值减去字符'A'的ASCII代码值加上10,存入其数组的对应下标分量中。遇其它符号不作处理,直至输入字符串结束。

【算法源代码】

void Count()

/*统计输入字符串中数字字符和字母字符的个数*/

{int i,num[36];

char ch;

for(i=0;i<36;i++)num[i]=0;/* 初始化*/

专升本数据结构试题解析(21).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219