![數(shù)據(jù)結(jié)構(gòu)課件第4章_第1頁(yè)](http://file4.renrendoc.com/view/a4a7dca16642cd7e9f7f3666ccf9e792/a4a7dca16642cd7e9f7f3666ccf9e7921.gif)
![數(shù)據(jù)結(jié)構(gòu)課件第4章_第2頁(yè)](http://file4.renrendoc.com/view/a4a7dca16642cd7e9f7f3666ccf9e792/a4a7dca16642cd7e9f7f3666ccf9e7922.gif)
![數(shù)據(jù)結(jié)構(gòu)課件第4章_第3頁(yè)](http://file4.renrendoc.com/view/a4a7dca16642cd7e9f7f3666ccf9e792/a4a7dca16642cd7e9f7f3666ccf9e7923.gif)
![數(shù)據(jù)結(jié)構(gòu)課件第4章_第4頁(yè)](http://file4.renrendoc.com/view/a4a7dca16642cd7e9f7f3666ccf9e792/a4a7dca16642cd7e9f7f3666ccf9e7924.gif)
![數(shù)據(jù)結(jié)構(gòu)課件第4章_第5頁(yè)](http://file4.renrendoc.com/view/a4a7dca16642cd7e9f7f3666ccf9e792/a4a7dca16642cd7e9f7f3666ccf9e7925.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章串內(nèi)容4.1串的類型定義
4.2串的表示和實(shí)現(xiàn)
4.3串的模式匹配算法
4.4串操作應(yīng)用舉例●基本要求:
1)了解串的概念、邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu);
2)掌握串的表示與實(shí)現(xiàn)方法;
3)掌握串的模式匹配算法;
4)學(xué)會(huì)串的正確應(yīng)用;●學(xué)習(xí)重點(diǎn):
1)串的表示與實(shí)現(xiàn)方法;
2)串的模式匹配算法;4.1串的類型定義4.1.1
串的基本概念
術(shù)語(yǔ):1)串名:S.2)串值:'a1a2···an',ai(1≤i≤n).3)串的長(zhǎng)度:串中所包含的字符個(gè)數(shù),如串
‘a(chǎn)bcde’的長(zhǎng)度為5.4)空串:長(zhǎng)度為0(n=0)的串,它不包含任何
字符,記作S=''(或S=φ).定義:串是由零個(gè)或多個(gè)任意字符組成的字符序列。一般記作:s='a1a2...an'(n>=0)
4.1串的類型定義4.1.1
串的基本概念
術(shù)語(yǔ):5)空格串:由空格符(ASCII值32)組成的串,如S=‘’.注意S=‘’與S=‘’不
同,前者是長(zhǎng)度為1的非空串,它含有
一個(gè)空格字符,而后者是長(zhǎng)度為0的空
串。
6)子串:串中任意個(gè)連續(xù)的字符組成的子序
列。比如'abcde'中的'bcd'.4.1串的類型定義4.1.1
串的基本概念
用二元組的形式來(lái)定義串:串是一個(gè)二元組,
string=(D,R)其中,D={ai|ai∈字符集,i=1,2,···,n,n≥0}R={N}
有序偶的集合N={<ai-1,ai>|ai-1,ai∈D,i=2,3,···n}
故串的邏輯結(jié)構(gòu)和線性表極為相似。區(qū)別僅在D的定義上。線性表的數(shù)據(jù)對(duì)象可以是任意數(shù)據(jù)類型,而串的數(shù)據(jù)對(duì)象是字符集。4.1串的類型定義4.1.2
串的ADT定義
ADTString{數(shù)據(jù)對(duì)象:D={ai|ai(-CharacterSet,i=1,2,...,n,n>=0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai(-D,i=2,...,n}基本操作:StrAssign(&T,chars)//chars是字符常量。生成一個(gè)其值//等于chars的串T。StrCopy(&T,S)//串S存在則由串S復(fù)制得串TStrEmpty(S)//串S存在則若S為空串,返回真否則返回假pare(S,T)//串S和T存在,若S>T,則返回值大于0,//若S=T,則返回值=0,若S<T,則返回值<04.1串的類型定義4.1.2
串的ADT定義
StrLength(S)//串S存在,返回S的元素個(gè)數(shù)稱為串的長(zhǎng)度.
ClearString(&S)//串S存在,將S清為空串
Concat(&T,S1,S2)//串S1和S2存在,用T返回由S1和S2聯(lián)接
//而成的新串
SubString(&Sub,S,pos,len)//串S存在,求從位置pos開(kāi)始//長(zhǎng)度為len的子串
//1<=pos<=StrLength(S)且0<=len<=StrLength(S)-pos+1
Index(S,T,pos)//串S和T存在,T是非空。1<=pos<=StrLength(S)
//若主串S中存在和串T值相同的子串,則返回它在主串S中
//第一次出現(xiàn)的位置,否則函數(shù)值為0
Replace(&S,T,V)//串S,T和V存在,T是非空串,用V替換主串S中
//出現(xiàn)的所有與T相等的不重疊的子串
StrInsert(&S,pos,T)//串S和T存在,1<=pos<=StrLength(S)+1,//在串S的第pos個(gè)字符之前插入串T
StrDelete(&S,pos,len)//串S存在,1<=pos<=StrLength(S)-//len+1從串中刪除第pos個(gè)字符起長(zhǎng)度為len的子串
DestroyString(&S)//串S存在,則串S被銷毀}ADTString4.1串的類型定義4.1.2
串的ADT定義
返回目錄用一組地址連續(xù)的存儲(chǔ)單元來(lái)存儲(chǔ)串的字符序列。每個(gè)字符占用一個(gè)字節(jié)(Byte)。串中相鄰的字符順序地存放在相鄰的字節(jié)中。4.2串的表示和實(shí)現(xiàn)4.2.1
串的定長(zhǎng)順序存儲(chǔ)表示
DATASTRUCTURES11+11+21+15······圖4.1串的順序存儲(chǔ)結(jié)構(gòu)定長(zhǎng)順序存儲(chǔ)結(jié)構(gòu)串定義:#definemaxlen255//允許最大的長(zhǎng)度typedefunsignedcharString[maxlen+1];//下標(biāo)0的位置存放長(zhǎng)度實(shí)現(xiàn):串的聯(lián)接函數(shù)、求子串的函數(shù)、求子串位置的定位函數(shù)1、串的聯(lián)接函數(shù)Concat(L,s,t)4.2串的表示和實(shí)現(xiàn)4.2.1
串的定長(zhǎng)順序存儲(chǔ)表示
其中,L,s,t是String;
[分析]相當(dāng)于求L=s+t,若s與t連接后的串值長(zhǎng)度超過(guò)maxlen,則超過(guò)部分將被截?cái)唷_\(yùn)算結(jié)果有三種可能情況。
1)length(s)+length(t)≤maxlen
Length(s)Length(t)s.cht.chL.chLength(L)maxlen圖4.2串的聯(lián)結(jié)操作示意圖(1)1、串的聯(lián)接函數(shù)Concat(L,s,t)4.2串的表示和實(shí)現(xiàn)4.2.1
串的定長(zhǎng)順序存儲(chǔ)表示
2)length(s)+length(t)>maxlen,而length(s)<maxlen需將t的一部分截?cái)?,所得串L中包含s的全部與t的一個(gè)子串圖4.3串的聯(lián)結(jié)操作示意圖(2)Length(s)Length(t)s.cht.chL.chmaxlent中被截去的字符序列Length(L)1、串的聯(lián)接函數(shù)Concat(L,s,t)4.2串的表示和實(shí)現(xiàn)4.2.1
串的定長(zhǎng)順序存儲(chǔ)表示
3)length(s)=maxlen得到的串L是s的串。圖4.4串的聯(lián)結(jié)操作示意圖(3)Length(s)Length(t)s.cht.chL.chmaxlent串被全部截去Length(L)1、串的聯(lián)接函數(shù)Concat(L,s,t)4.2串的表示和實(shí)現(xiàn)4.2.1
串的定長(zhǎng)順序存儲(chǔ)表示
4)函數(shù)實(shí)現(xiàn)StatusConcat(string&L,strings,stringt){/*返回s和t聯(lián)接的結(jié)果,s和t的值不變。*/switch{caselength(s)+length(t)≤maxlen://正常聯(lián)接
L[1..length(s)]=s[1..length(s)];L[length(s)+1..length(s)+length(t)]=t[1..length(t)];L[0]=s[0]+t[0];overflow=false;1、串的聯(lián)接函數(shù)Concat(L,s,t)4.2串的表示和實(shí)現(xiàn)4.2.1
串的定長(zhǎng)順序存儲(chǔ)表示
4)函數(shù)實(shí)現(xiàn)caselength(s)<maxlen://串t截尾
overflow=true;L[1..length(s)]=s[1..length(s)];L[length(s)+1..maxlen]=t[1..maxlen–length(s)];L[0]=maxlen;default://串中只含soverflow=true;L[1..maxlen]=s[1..maxlen];L[0]=maxlen;}//switchreturnoverflow;}//Concat●
用堆結(jié)構(gòu)存儲(chǔ)串值4.2串的表示和實(shí)現(xiàn)4.2.2
串的堆分配存儲(chǔ)表示
特點(diǎn):每個(gè)串的串值各存儲(chǔ)在一組地址連續(xù)的存儲(chǔ)單元中,但它們的存儲(chǔ)地址是在程序執(zhí)行過(guò)程中動(dòng)態(tài)分配而得。
typedefstruct{ char*ch; intlength; }HString;使用時(shí)必須分配(malloc)和回收(free)內(nèi)存。4.2串的表示和實(shí)現(xiàn)4.2.2
串的堆分配存儲(chǔ)表示
●
用堆結(jié)構(gòu)存儲(chǔ)串值定義HStrings1HStrings2s1s2lengthch2115
···ASTRINGOFLENGTH21F···DATASTRUCTURES
···HeapFreeFree是尚未分配的內(nèi)存首地址圖4.5串的動(dòng)態(tài)分配存儲(chǔ)結(jié)構(gòu)示意圖4.2串的表示和實(shí)現(xiàn)4.2.2
串的堆分配存儲(chǔ)表示
●
聯(lián)接運(yùn)算ConcatStatusConcat(HString&t,HStrings1,HStrings2){
//連接s1,s2到t中
if(t.ch)free(t.ch);//釋放原空間
if(!(t.ch=(char*)malloc(s1.length+s2.length)*sizeof(char))))
returnOVERFLOW;
//分配空間
t.ch[0..s1.length-1]=s1.ch[0..s1.length-1];
//處理s1
t.length=s1.length+s2.length;
//長(zhǎng)度
t.ch[s1.length..t.length-1]=s2.ch[0..s2.length-1];
//s2}4.2串的表示和實(shí)現(xiàn)4.2.3
串的塊鏈存儲(chǔ)表示
●
用線性鏈表的方式存儲(chǔ)串值結(jié)點(diǎn)大小問(wèn)題?^H優(yōu)點(diǎn):便于實(shí)現(xiàn)插入、刪除等操作缺點(diǎn):浪費(fèi)存儲(chǔ)空間,存儲(chǔ)利用率最多1/21)結(jié)點(diǎn)大小等于1,即一個(gè)結(jié)點(diǎn)存放1個(gè)字符DATAS^head······圖4.6串值的鏈表存儲(chǔ)方式(結(jié)點(diǎn)大小為1)4.2串的表示和實(shí)現(xiàn)4.2.3
串的塊鏈存儲(chǔ)表示
●
用線性鏈表的方式存儲(chǔ)串值結(jié)點(diǎn)大小問(wèn)題?^H優(yōu)點(diǎn):存儲(chǔ)效率較高缺點(diǎn):實(shí)現(xiàn)插入、刪除等操作較復(fù)雜2)結(jié)點(diǎn)大小等于4,即一個(gè)結(jié)點(diǎn)存放4個(gè)字符DATASTRUCTURES^head圖4.7串值的鏈表存儲(chǔ)方式(結(jié)點(diǎn)大小為4)4.2串的表示和實(shí)現(xiàn)4.2.3
串的塊鏈存儲(chǔ)表示
●
用線性鏈表的方式存儲(chǔ)串值
為便于進(jìn)行串的操作,當(dāng)以鏈表存儲(chǔ)串值時(shí),給出頭、尾指針,加當(dāng)前串的長(zhǎng)度。稱如此定義的串存儲(chǔ)結(jié)構(gòu)為塊鏈結(jié)構(gòu)。
設(shè)尾指針的目的是為了便于進(jìn)行聯(lián)接操作。clst15DATASTRUCTURES#^頭尾長(zhǎng)度圖4.8塊鏈結(jié)構(gòu)示意圖4.2串的表示和實(shí)現(xiàn)4.2.3
串的塊鏈存儲(chǔ)表示
●
用線性鏈表的方式存儲(chǔ)串值//-------串的塊鏈存儲(chǔ)表示-------#defineCHUNKSIZE80//用戶定義的結(jié)點(diǎn)大小typedefstructchunk{charch[CHUNKSIZE];//塊大小
structchunk*next;//指針}chunk;typedefstruct{chunk*head,*tail;//串的頭、尾指針
intlength;
//串的當(dāng)前長(zhǎng)度}LString;LStringclst;模式匹配算法,其中p為模式設(shè)有兩個(gè)串
s='s1s2···sn'p='p1p2···pm'(0<m≤n)稱主串S為目標(biāo)(串),子串p為模式(串)。串的模式匹配:在目標(biāo)S中尋找模式為p的子串的過(guò)程.串模式匹配的結(jié)果:(1)成功,Index(S,p)>0
(2)失敗,Index(S,p)==0其中Index返回第一個(gè)模式為p的子串在主串s中的位置。4.3串的模式匹配算法4.3.1
求子串位置的定位函數(shù)
Index(s,p)
使用串的基本操作(如Equal,Length,Substr等)實(shí)現(xiàn)求子串位置的定位函數(shù)Index(s,p)的算法:intIndex(strings,stringp){n=Length(S);m=Length(p);i=1;while(i≤n–m+1)if(Equal(Substr(S,i,m),p))returni;elsei++;return0;}
//index4.3串的模式匹配算法4.3.1
求子串位置的定位函數(shù)
Index(s,p)
例:主串S:“acabaabaabcacaabc”模式串t:“abaabcac”簡(jiǎn)單的模式匹配算法(BF算法)s:acabaabaabcacaabct:abaabcaci=1j=1s:acabaabaabcacaabct:abaabcaci=2j=1if(s[i]==t[j]){i++;j++;}if(s[i]!=t[j])
{i回溯到本趟開(kāi)始的下一個(gè);
j回溯到1;}算法思想:s:acabaabaabcacaabct:abaabcaci=2j=1s:acabaabaabcacaabct:abaabcaci=3j=1i=4j=2i=5j=3i=6j=4i=7j=5i=8j=6s:acabaabaabcacaabct:abaabcaci=4j=1s:acabaabaabcacaabct:abaabcaci=5j=1i=6j=2s:acabaabaabcacaabct:abaabcaci=6j=1i=7j=2i=8j=3i=9j=4i=10j=5i=11j=6i=12j=7i=13j=8i=14j=9(2)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鉛壓延加工材合作協(xié)議書
- 2025年清理去石設(shè)備合作協(xié)議書
- 八年級(jí)英語(yǔ)下冊(cè) Unit 9 單元綜合測(cè)試卷(人教陜西版 2025年春)
- 2024-2025學(xué)年四川省南充市高坪區(qū)四年級(jí)(上)期末數(shù)學(xué)試卷
- 2025年臨滄市三方合作出資協(xié)議范文(2篇)
- 2025年產(chǎn)品購(gòu)銷買賣合同(2篇)
- 2025年產(chǎn)權(quán)交易所項(xiàng)目掛牌服務(wù)協(xié)議(6篇)
- 2025年個(gè)人門面出租合同標(biāo)準(zhǔn)樣本(2篇)
- 2025年五年級(jí)語(yǔ)文教學(xué)鑒定總結(jié)模版(三篇)
- 2025年代理委托處理房地產(chǎn)協(xié)議(2篇)
- 《中電聯(lián)團(tuán)體標(biāo)準(zhǔn)-220kV變電站并聯(lián)直流電源系統(tǒng)技術(shù)規(guī)范》
- 中國(guó)主要蜜源植物蜜源花期和分布知識(shí)
- 電化學(xué)免疫傳感器的應(yīng)用
- 數(shù)據(jù)中心基礎(chǔ)知識(shí)培訓(xùn)-2024鮮版
- 供電企業(yè)輿情的預(yù)防及處置
- 【高中語(yǔ)文】《氓》課件++統(tǒng)編版+高中語(yǔ)文選擇性必修下冊(cè)
- T-WAPIA 052.3-2023 無(wú)線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點(diǎn)和控制器
- 第4課+中古時(shí)期的亞洲(教學(xué)設(shè)計(jì))-【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 金點(diǎn)子活動(dòng)總結(jié)匯報(bào)
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制完整
- 原料驗(yàn)收標(biāo)準(zhǔn)知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論