




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、串的匹配運算 數(shù) 據(jù) 結(jié) 構(gòu)串串的匹配運算串的匹配運算,就是判斷某串是否是另一個已知串的子串,如是其子串,則給出該子串的起始點(即從已知串的哪個字符開始),故此運算又稱為子串定位運算。設已知串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的相應字符
2、匹配,則整個運算結(jié)束,返回子串的起始位置為1;當進行中遇到兩串的相應字符不匹配時,則返回來將r2的第一個字符與r1的第二個比較,將r2的第二個字符與r1的第三個字符進行比較,若整個r2的各個字符都與r1的相應字符匹配,則運算結(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當前結(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+; 串匹配算法分析與改進該匹配算法比較簡單,但效率不高。算法的
4、時間復雜性為O(Lr1Lr2)。作兩項改進,可以提高平均情況的運算速度: 1) 先檢查r2的首尾兩字符在r1中是否匹配,這兩對字符都匹配了,再檢查中間的字符; 2) 當后面一些輪r1中剩下的字符數(shù)已小于r2的長度時停止運算,因為這種情況匹配已不可能成功了。 返回串例4.1把順序存儲的兩個串r1和r2首尾相連成一個串r,其中r1在前r2在后。解:在順序存儲結(jié)構(gòu)中,實現(xiàn)串的連接操作,只要進行相應的“串復制”操作即可,只是如果在操作中出現(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年法學概論考試科目簡介與試題及答案
- 2025屆河南省新鄉(xiāng)、開封市名校聯(lián)考八下數(shù)學期末預測試題含解析
- 行政管理專業(yè)教師的教學策略試題及答案
- 法學概論復習指南試題及答案
- 如何制定提升競爭力的策略試題及答案
- 財務報告的法律及道德責任試題及答案
- 物資分類管理方案計劃
- 江蘇省泰州市相城區(qū)黃橋中學2025屆數(shù)學八下期末學業(yè)水平測試模擬試題含解析
- 遼寧省營口市大石橋市石佛中學2025屆八年級數(shù)學第二學期期末經(jīng)典試題含解析
- 防范火災隱患的保安工作措施計劃
- 招投標相關知識培訓課件
- 中國血脂管理指南2024版解讀課件
- 2025屆浙江省稽陽聯(lián)誼學校高三下學期4月二模政治試題 含解析
- 2025年北京市東城區(qū)九年級初三一模英語試卷(含答案)
- 2025年北京市東城區(qū)高三二模數(shù)學試卷(含答案)
- 首醫(yī)口腔面試真題及答案
- 門診病歷基本書寫規(guī)范
- 住宅區(qū)和住宅建筑內(nèi)光纖到戶通信設施工程設計規(guī)范
- 景區(qū)衛(wèi)生培訓課件
- 七年級下冊《山地回憶》課件
- 《房顫心律失常的護理》課件
評論
0/150
提交評論