清华考研真题第四章串_第1页
清华考研真题第四章串_第2页
清华考研真题第四章串_第3页
清华考研真题第四章串_第4页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

voidString_Reverse(Stringtypes,Stringtype&r)//s{StrAssign(r初始化r{}st中没有的字符构成的新串{{ { pare(c,SubString(t,k,1));k判断当前字t中}intReplace(Stringtype&S,StringtypeT,StringtypeV);//S中所有子串T{++)// ))//{//Theadtaili+=Strlen(V当前指针跳到插入串以后return会引起不希望的,虽然在大多数情况下没有影响.请思考:设S='place',T='ace',VintDelete_SubString(Stringtype&s,Stringtypet)//从串st相同的子{ {StrAssign(S,Concat(head,tail));//head,tail连接为新串returnn,{Initstack(ssStringtype{if(r为字母push(s,r);{if(StackEmpty(s))returnERROR;if(StackEmpty(s))returnERROR;c}if(!StackEmpty(s))returnERROR;returnOK;returntype的定义见{ pare(Stringtypes,Stringtypet)//串的比较,s>t时返回正数,s=t0,s<t{if(i>s[0]&&i>t[0])return0;elseif(i>s[0])return-t[i];elseif(i>t[0])returns[i];elsereturns[i]-t[i]; {{if(k>T[0找到了与T匹配的子串:{])//{}//{}returnn;typedefstructcharch;int}void {mytypeT[MAXSIZE];//用结构数组T统计结{)if(T[j].ch)T[j].num++;elseT[j]={c,1}; st中没有的字符构成的新串{{for(j=1;j<i&&s[j]!=c;js的当前字符c{}intSubString_Delete(Stringtype&s,Stringtypet)//从串st{{if(j>m)//t匹配的子串{for(k=i;k<=s[0]-t[0];ks[k]=s[k+t[0左移删除}returnn;typedefcharLStrNodeLStrNode,*LString;voidStringAssign(LString&s,LStringt)//t{{{q-}q-voidStringCopy(LString&s,LStringt)//把串t为串s.与前一个程序的区别在,s业已存在{{}{} pare(LStrings,LStringt)//串的比较,s>t时返回正数,s=t<t{if(!p&&!q)return0;elseif(!p)return-(q->ch);elseif(!q)returnp->ch;elsereturnp->ch-q->ch; intStringLen(LStrings)//s的长度(元素个数{returni;LString*Concat(LStrings,LStringt)//st形成新串,{{}//for//串}//for//串{returnp;LString*Sub_String(LStrings,intstart,intlen)//返回一个串,sstartlen的子串{for(r=s;start;start--,r=r->nextstartr{}//串returnp;returnvoidLString_Concat(LString&t,LString&s,charc)//用块链结构,把串s插入t的字符c{while(p&&!(i=Find_Char(p,cp=p->nextcif(!p)//没找到{t.tail=s.tailst}{r=(Chunk*)malloc(sizeof(Chunk));//将包含字符c的节点p为两个for(j=0;j<i;j++)r->ch[j]='#';//p包含c及其以前的部分for(j=i;j<CHUNKSIZE;j++)//新结点rc以后的部分{p->ch[jp的后半部分和r的前半部分的字符改为无效字符}}r->next=q;sprt.curlen+=s.curlen;修改串长intFind_Char(Chunk*p,charc)//c,如找到则返回位置是第几个字符,0{if(i==CHUNKSIZE)return0;elsereturnintLString_Palindrome(LStringL)//判断以块链结构的串L是否为回文序列,是{p=S.head;i=0;k=1;i指示元素在块中的下标,k指示元素在整个序列中的序号(1开{if(k<=S.curlen/2Push(S,p->ch[i将前半段的字符入串elseif(k>(S.curlen+1)/2){Pop(S,c将后半段的字符与栈中的元素相匹配if(p->ch[i]!=c)return0;//失配}//{}return1;voidHString_Concat(HStrings1,HStrings2,HString&t)//s12{if(t.ch)free(t.ch);for(i=1;i<=s1.length;i++)t.ch[i-1]=s1.ch[i-1];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];{{if(k==T.lengthT匹配的子串:分三种情况处理{{}}//{}returnn;StatusHString_Insert(HString&S,intpos,HStringT)//把TSpos{if(pos<1)returnif(pos>S.length)pos=S.length+1;//当插入位置大于串长时,看作添加在串尾];//return{{{//}{}if(j>t[0])returni-if(j>t[0])returni-voidLGet_next(LString&T)//get_next{{{}elseq=q-{{{{}elseq=q-{return发现匹配后,要往回找子串的头returnNULL;{{for(k=0,j=1;j<=S[0]-i;j++)//jS2的当前指针,S1i+j,两{])//elsek=0;k)//{//}{printf("LongestRepeatingSubstringlength:%d\n",maxlen); Position2:%d\n",lrs1,lrs2);}elseprintf("NoRepeatingSubstring分析:i代表"错位值".本算法的思想是,SS21格,2格,3格,...S1相匹配,如果存在最长重复子串,则必然能在此过程中被发现.lrs1,lrs2,maxlen来记录已发现的最长重复子串第一次出现位置,第二次出现位置和长度.题目中未说明"重复子串"是否允许有部分,本算法假定允许.如不允许,只需在第二个fork<=i即可.O(Strlen(S)^2).voidGet_LPubSub(StringtypeS,StringtypeT)//ST的最长公共子串位置和长{{}{为简化设计,STA,B{if(i<0)iBA的错位值,向左为负,0,{}//B有一部分在Aelseif(i>A[0]-{}//B有一部分在A{}//BA左右两端之间//ABA上需要匹配的区间(B重合的区间){if(A[j]==B[j-i])k++;elsek=0;{}{{} 心静{}//将A,B上的位置映射回S,T上的位置printf("LongestPublicSubstringlength:%d\n",maxlen);printf("PositioninS:%d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论