清華考研真題第四章串_第1頁(yè)
清華考研真題第四章串_第2頁(yè)
清華考研真題第四章串_第3頁(yè)
清華考研真題第四章串_第4頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

voidString_Reverse(Stringtypes,Stringtype&r)//s{StrAssign(r初始化r{}st中沒(méi)有的字符構(gòu)成的新串{{ { pare(c,SubString(t,k,1));k判斷當(dāng)前字t中}intReplace(Stringtype&S,StringtypeT,StringtypeV);//S中所有子串T{++)// ))//{//Theadtaili+=Strlen(V當(dāng)前指針跳到插入串以后return會(huì)引起不希望的,雖然在大多數(shù)情況下沒(méi)有影響.請(qǐng)思考:設(shè)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的定義見(jiàn){ pare(Stringtypes,Stringtypet)//串的比較,s>t時(shí)返回正數(shù),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];//用結(jié)構(gòu)數(shù)組T統(tǒng)計(jì)結(jié){)if(T[j].ch)T[j].num++;elseT[j]={c,1}; st中沒(méi)有的字符構(gòu)成的新串{{for(j=1;j<i&&s[j]!=c;js的當(dāng)前字符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.與前一個(gè)程序的區(qū)別在,s業(yè)已存在{{}{} pare(LStrings,LStringt)//串的比較,s>t時(shí)返回正數(shù),s=t<t{if(!p&&!q)return0;elseif(!p)return-(q->ch);elseif(!q)returnp->ch;elsereturnp->ch-q->ch; intStringLen(LStrings)//s的長(zhǎng)度(元素個(gè)數(shù){returni;LString*Concat(LStrings,LStringt)//st形成新串,{{}//for//串}//for//串{returnp;LString*Sub_String(LStrings,intstart,intlen)//返回一個(gè)串,sstartlen的子串{for(r=s;start;start--,r=r->nextstartr{}//串returnp;returnvoidLString_Concat(LString&t,LString&s,charc)//用塊鏈結(jié)構(gòu),把串s插入t的字符c{while(p&&!(i=Find_Char(p,cp=p->nextcif(!p)//沒(méi)找到{t.tail=s.tailst}{r=(Chunk*)malloc(sizeof(Chunk));//將包含字符c的節(jié)點(diǎn)p為兩個(gè)for(j=0;j<i;j++)r->ch[j]='#';//p包含c及其以前的部分for(j=i;j<CHUNKSIZE;j++)//新結(jié)點(diǎn)rc以后的部分{p->ch[jp的后半部分和r的前半部分的字符改為無(wú)效字符}}r->next=q;sprt.curlen+=s.curlen;修改串長(zhǎng)intFind_Char(Chunk*p,charc)//c,如找到則返回位置是第幾個(gè)字符,0{if(i==CHUNKSIZE)return0;elsereturnintLString_Palindrome(LStringL)//判斷以塊鏈結(jié)構(gòu)的串L是否為回文序列,是{p=S.head;i=0;k=1;i指示元素在塊中的下標(biāo),k指示元素在整個(gè)序列中的序號(hào)(1開(kāi){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;//當(dāng)插入位置大于串長(zhǎng)時(shí),看作添加在串尾];//return{{{//}{}if(j>t[0])returni-if(j>t[0])returni-voidLGet_next(LString&T)//get_next{{{}elseq=q-{{{{}elseq=q-{return發(fā)現(xiàn)匹配后,要往回找子串的頭returnNULL;{{for(k=0,j=1;j<=S[0]-i;j++)//jS2的當(dāng)前指針,S1i+j,兩{])//elsek=0;k)//{//}{printf("LongestRepeatingSubstringlength:%d\n",maxlen); Position2:%d\n",lrs1,lrs2);}elseprintf("NoRepeatingSubstring分析:i代表"錯(cuò)位值".本算法的思想是,SS21格,2格,3格,...S1相匹配,如果存在最長(zhǎng)重復(fù)子串,則必然能在此過(guò)程中被發(fā)現(xiàn).lrs1,lrs2,maxlen來(lái)記錄已發(fā)現(xiàn)的最長(zhǎng)重復(fù)子串第一次出現(xiàn)位置,第二次出現(xiàn)位置和長(zhǎng)度.題目中未說(shuō)明"重復(fù)子串"是否允許有部分,本算法假定允許.如不允許,只需在第二個(gè)fork<=i即可.O(Strlen(S)^2).voidGet_LPubSub(StringtypeS,StringtypeT)//ST的最長(zhǎng)公共子串位置和長(zhǎng){{}{為簡(jiǎn)化設(shè)計(jì),STA,B{if(i<0)iBA的錯(cuò)位值,向左為負(fù),0,{}//B有一部分在Aelseif(i>A[0]-{}//B有一部分在A{}//BA左右兩端之間//ABA上需要匹配的區(qū)間(B重合的區(qū)間){if(A[j]==B[j-i])k++;elsek=0;{}{{} 心靜{}//將A,B上的位置映射回S,T上的位置printf("LongestPublicSubstringlength:%d\n",maxlen);printf("PositioninS:%d

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論