数据结构第4章串练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构第4章串练习
第4章练习
1、已知s=‘(XYZ)*’,t=‘(X+Z)*Y’。
试利用联接、求子串和置换等基本运算,将s 转化为t。
2、编写对串求逆的递推算法
3、试写一算法,在串的堆存储结构上实现串的基本操作Concat(&T,s1,s2)
4、试写一算法,实现堆存储结构的串的置换操作Replace(&S,T,V)
1、答案
Concat(t,Replace(Substring(Sub,S,1,5),’Y’,’+’), Replace(Substring(Sub,S,6,1),’*’,’*Y’))
2、答案
void String_Reverse(Stringtype s,Stringtype &r)//求s的逆串r {
StrAssign(r,''); //初始化r为空串
for(i=Strlen(s);i;i--)
{
StrAssign(c,SubString(s,i,1));
StrAssign(r,Concat(r,c)); //把s的字符从后往前添加到r中
}
}//String_Reverse
3、答案
void HString_Concat(HString s1,HString s2,HString &t)//将堆结构表示的串s1和s2连接为新串t
{
if(t.ch) free(t.ch);
t.ch=malloc((s1.length+s2.length)*sizeof(char));
for(i=1;i<=s1.length;i++) t.ch[i-1]=s1.ch[i-1];
for(j=1;j<=s2.length;j++,i++) t.ch[i-1]=s2.ch[j-1];
t.length=s1.length+s2.length;
}//HString_Concat
4、答案
int HString_Replace(HString &S,HString T,HString V)//堆结构串上的置换操作,返回置换次数{
for(n=0,i=0;i<=S.length-T.length;i++)
{
for(j=i,k=0;k<t.length&&s.ch[j]==t.ch[k];j++,k++);< p=""> if(k==T.length) //找到了与T匹配的子串:分三种情况处理
{
if(T.length==V.length)
for(l=1;l<=T.length;l++) //新子串长度与原子串相同时:直接替换S.ch[i+l-1]=V.ch[l-1];
else if(T.length<="">
{
for(l=S.length-1;l>=i+T.length;l--)
S.ch[l+V.length-T.length]=S.ch[l];
for(l=0;l<v.length;l++)< p="">
S[i+l]=V[l];
}
else //新子串长度小于原子串时:先将后部左移
{
for(l=i+V.length;l<s.length+v.length-t.length;l++)< p=""> S.ch[l]=S.ch[l-V.length+T.length];
for(l=0;l<v.length;l++)< p="">
S[i+l]=V[l];
}
S.length+=V.length-T.length;
i+=V.length;n++;
}//if
}//for
return n;
}//HString_Replace
</v.length;l++)<>
</s.length+v.length-t.length;l++)<>
</v.length;l++)<>
</t.length&&s.ch[j]==t.ch[k];j++,k++);<>。