版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、串的匹配運算 數(shù) 據(jù) 結(jié) 構(gòu)串串的匹配運算串的匹配運算,就是判斷某串是否是另一個已知串的子串,如是其子串,則給出該子串的起始點(即從已知串的哪個字符開始),故此運算又稱為子串定位運算。設(shè)已知串r1和r2,要求判斷r2是否是r1的子串,如果是其子串則給出起始點。顯然r2是r1的子串的一個必要條件是,r2的長度Lr2一定要小于或等于r1的長度Lr1,即Lr2Lr1。假定串r1或r2都采用每結(jié)點存一個字符的鏈接存儲結(jié)構(gòu)。 串一種最簡單的匹配算法首先將r2的第1個字符與r1的第1個字符比較,如二者匹配,則將r2的第二個字符與r1的第二個字符比較,這樣比較下去,若直至r2的末尾一個字符都與r1的相應(yīng)字符
2、匹配,則整個運算結(jié)束,返回子串的起始位置為1;當(dāng)進(jìn)行中遇到兩串的相應(yīng)字符不匹配時,則返回來將r2的第一個字符與r1的第二個比較,將r2的第二個字符與r1的第三個字符進(jìn)行比較,若整個r2的各個字符都與r1的相應(yīng)字符匹配,則運算結(jié)束,返回子串的起始位置為2; 串以此類推,如出現(xiàn)不匹配,再返回來將r2的第一個字符與r1的第三個字符比較。如此逐輪做下去,直至匹配成功,給出子串的起始位置或失敗返回起始位置為0。例:r1=abafabcgw r2=abc 子串r2在r1中的起始位置為5。 串匹配算法int position ( linkstring *r1,*r2) linkstring *p,*p1,*
3、q,*q1; int i=0; p=r1; while(p!=NULL) /*循環(huán)掃描r1每結(jié)點*/ q=r2; while(q!=NULL) /*依次掃描r2每結(jié)點*/ if (p-ch=q-ch) /*是否與r1當(dāng)前結(jié)點相等*/ /*相等,判定后面元素是否相同*/ p1=p-link; q1=q-link; while(p1-ch=q1-ch)串匹配算法續(xù) p1=p1-link; q1=q1-link; if (q1=NULL) return i; /*返回子串起始位置*/ else q=q-link; p=p-link; i+; 串匹配算法分析與改進(jìn)該匹配算法比較簡單,但效率不高。算法的
4、時間復(fù)雜性為O(Lr1Lr2)。作兩項改進(jìn),可以提高平均情況的運算速度: 1) 先檢查r2的首尾兩字符在r1中是否匹配,這兩對字符都匹配了,再檢查中間的字符; 2) 當(dāng)后面一些輪r1中剩下的字符數(shù)已小于r2的長度時停止運算,因為這種情況匹配已不可能成功了。 返回串例4.1把順序存儲的兩個串r1和r2首尾相連成一個串r,其中r1在前r2在后。解:在順序存儲結(jié)構(gòu)中,實現(xiàn)串的連接操作,只要進(jìn)行相應(yīng)的“串復(fù)制”操作即可,只是如果在操作中出現(xiàn)兩串長度之和大于上界maxlen時,做溢出處理。串例4.1算法void concat ( orderstring *r1, *r2, *r) int i; prin
5、tf(“r1=%s,r2=%sn”,r1-vec,r2-vec); if (r1-len+r2-lenmaxlen) printf(“上溢出n”); /*溢出處理*/ else for(i=1;ilen;i+) r-veci=r1-veci; /*將r1串傳給r*/ for(i=1;ilen;i+) r-vecr1-len+i=r2-veci; /*r2傳給r */ r-vecr1-len+i+1= 0; r-len=r1-len+r2-len; 串例4.2把兩個以鏈接方式存儲的串r1和r2首尾連成一個串r,其中r1在前,r2在后。linkstring *concat ( linkstring
6、 *r1, *r2) node *p,*q,*s,*r; r=(linkstring *)malloc(sizeof(linkstring); r-ch=r1-ch; q=r; p=r1-link; while(p!=NULL) 串例4.2算法續(xù) s=(linkstring *)malloc(sizeof(linkstring); s-ch=p-ch; q-link=s; q=s; p=p-link;p=r2;while(p!=NULL) s=(linkstring *)malloc(sizeof(linkstring); 串例4.2算法續(xù) s-ch=p-ch; q-link=s; q=s;
7、p=p-link; q-link=NULL; return (r); 串例4.3從鏈接存儲的串r1中的第i個字符開始,把連續(xù)j個字符組成的子串賦給r。 linkstring *substring (linkstring *r1,int i,j) int k; linkstring *p, *q, *s, *r; p=r1; k=1; while(klink; k+; 串例4.3算法續(xù)if(p=NULL) printf(“出錯n”);else r=(linkstring *) malloc(sizeof(linkstring); q=r; k=1; while(kch=p-ch; q-link=s; /
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上??茖W(xué)技術(shù)職業(yè)學(xué)院《大數(shù)據(jù)技術(shù)原理及應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 上??苿?chuàng)職業(yè)技術(shù)學(xué)院《中小尺度空間景觀設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海交通大學(xué)《工程監(jiān)理》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海建設(shè)管理職業(yè)技術(shù)學(xué)院《提高課羽毛球》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海建橋?qū)W院《農(nóng)產(chǎn)品高效利用與管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海濟光職業(yè)技術(shù)學(xué)院《計算機在材料分析中的應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 教育決策報告范文模板
- 上海海洋大學(xué)《國際貿(mào)易實務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海海關(guān)學(xué)院《環(huán)境與生命科學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 企業(yè)員工管理制度選集大合集
- 耳機基本知識入門培訓(xùn)資料
- 反保險欺詐主題教育課件
- 口腔營銷培訓(xùn)
- 《歌劇魅影》音樂賞析
- 2023年浙江省高考1月化學(xué)真題試卷及答案
- 企業(yè)開放日活動方案
- 五力分析微軟office
- 山東省濟南市2022-2023學(xué)年高二上學(xué)期期末數(shù)學(xué)試題(學(xué)生版+解析)
- 2024年全國養(yǎng)老護(hù)理職業(yè)技能大賽選拔賽參考試題庫(含答案)
- 鑄牢中華民族共同體意識建設(shè)中華民族共同體
- 醫(yī)學(xué)檢驗、醫(yī)學(xué)影像檢查結(jié)果互認(rèn)制度測試題
評論
0/150
提交評論