知识大全 数据结构考研分类复习真题 第四章 答案[15]
Posted 长度
篇首语:一年好景君须记,最是橙黄橘绿时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第四章 答案[15]相关的知识,希望对你有一定的参考价值。
[题目分析]教材中介绍的串置换有两种形式 第一种形式是replace(s i j t) 含义是将s串中从第i个字符开始的j个字符用t串替换 第二种形式是replace(s t v) 含义是将s串中所有非重叠的t串用v代替 我们先讨论第一种形式的替换 因为已经给定顺序存储结构 我们可将s串从第(i+j )到串尾(即s curlen)移动t curlen j绝对值个位置(以便将t串插入) 若j>t curlen 则向左移;若j<t curlen 则向右移动;若j=t curlen 则不必移动 最后将t串复制到s串的合适位置上 当然 应考虑置换后的溢出问题
int replace(strtp s t int i j)//s和t是用一维数组存储的串 本算法将s串从第i个字符开始的连续j个字符用t串置换 操作成功返回 否则返回 表示失败 if(i< || j< || t curlen+s curlen j>maxlen) printf( 参数错误\\n );exit( );//检查参数及置换后的长度的合法性 if(j<t curlen)//若s串被替换的子串长度小于t串长度 则s串部分右移 for(k=s curlen ;k>=i+j ;k ) s ch[k+t curlen j]=s ch[k]; else if (j>t curlen)//s串中被替换子串的长度小于t串的长度 for(k=i +j;k<=s curlen ;k++) s ch[k (j t curlen)]=s ch[k]; for(k= ;k<t curlen;k++) s ch[i +k]=t ch[k]; //将t串复制到s串的适当位置 if(j>t curlen) s curlen=s curlen (j t curlen);else s curlen=s curlen+(t curlen j); //算法结束
[算法讨论]若允许使用另一数组 在检查合法性后 可将s的第i个(不包括i)之前的子串复制到另一子串如s 中 再将t串接到s 串后面 然后将s的第i+j直到尾的部分加到s 之后 最后将s 串复制到s 主要语句有
for(k= ;k<i;k++) s ch[k]=s ch[k]; //将s 第i个字符前的子串复制到s 这时k=i for(k= ;k<t curlen;k++) s ch[i+k]=t ch[k]//将t串接到s 的尾部 l=s curlen+t curlen j ; for(k=s curlen ;k>i +j;k );//将子串第i+j 个字符以后的子串复制到s s ch[l ]=s ch[k] for(k= ;k<s curlen+t curlen j;k++) s ch[k]=s ch[k];//将结果串放入s
下面讨论replace(s t v)的算法 该操作的意义是用串v替换所有在串s中出现的和非空串t相等的不重叠的子串 本算法不指定存储结构 只使用串的基本运算
void replace(string s t v)//本算法是串的置换操作 将串s中所有非空串t相等且不重复的子串用v代替 i=index(s t);//判断s是否有和t相等的子串 if(i!= )//串s中包含和t相等的子串 creat(temp );//creat操作是将串常量(此处为空串)赋值给temp m=length(t);n=length(s);//求串t和s的长度 while(i!= ) assign(temp concat(temp substr(s i ) v));//用串v替换t形成部分结果 assign(s substr(s i+m n i m+ ));//将串s中串后的部分形成新的s串 n=n (i ) m;//求串s的长度 i=index(s t);//在新s串中再找串t的位置 assign(s contact(temp s)); //将串temp和剩余的串s连接后再赋值给s //if结束 //算法结束
cha138/Article/program/sjjg/201311/22614相关参考
.() ()next[k] .()i=i+ ()j:=j+ ()i:=ij+ ()j:=; ()imt(或i:=ij+) () 程序
.()p的nextval函数值为(p的next函数值为) ()利用KMP(改进的nextval)算法每趟匹配过程如下 第一趟匹配abcaabbabcabaacbacba abcab(i=j=
.任意个连续的字符组成的子序列 . O(m+n) . . .()模式匹配 ()模式串 .()其数据元素都是字符()顺序存储()和链式存储()串的长度相等且两串中对
.()S的next与nextval值分别为和p的next与nextval值分别为和 ()利用BF算法的匹配过程
[题目分析]实现字符串的逆置并不难但本题要求不另设串存储空间来实现字符串逆序存储即第一个输入的字符最后存储最后输入的字符先存储使用递归可容易做到 voidInvertStore(charA[])
6.模式串的next函数定义如下 next[j]= 根据此定义可求解模式串t的next和nextval值如下 .解法同上题其next和nextval值分别为和 .解法同题t串的next和n
[题目分析]本题是对字符串表达式的处理问题首先定义种数据结构符号的类码符号的TOKEN表示变量名表NAMEL和常量表CONSL这四种数据结构均定义成结构体形式数据部分用一维数组存储同时用指针指出数
[题目分析]本题属于查找待查找元素是字符串(长)将查找元素存放在一维数组中二分检索(即折半查找或对分查找)是首先用一维数组的中间元素与被检索元素比较若相等则检索成功否则根据被检索元素大于或小于中间
[题目分析]两个串的相等其定义为两个串的值相等即串长相等且对应字符相等是两个串相等的充分必要条件因此首先比较串长在串长相等的前提下再比较对应字符是否相等 intequal(strtpsstrtp
.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串串s用i指针(<=i<=slen)t串用j指针(<=j<=tlen)算法思想是对每个i(<=i<