4数据结构之串Word格式文档下载.docx

上传人:b****5 文档编号:20286905 上传时间:2023-01-21 格式:DOCX 页数:7 大小:50.74KB
下载 相关 举报
4数据结构之串Word格式文档下载.docx_第1页
第1页 / 共7页
4数据结构之串Word格式文档下载.docx_第2页
第2页 / 共7页
4数据结构之串Word格式文档下载.docx_第3页
第3页 / 共7页
4数据结构之串Word格式文档下载.docx_第4页
第4页 / 共7页
4数据结构之串Word格式文档下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

4数据结构之串Word格式文档下载.docx

《4数据结构之串Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《4数据结构之串Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。

4数据结构之串Word格式文档下载.docx

s1=”data”,s2=”structure”,

执行Concat(t,s1,s2)后,t=”datastructure”。

联结函数符合结合律,不符合交换律。

即:

Concat(t,s1,s2,s3)

=Concat(t,Concat(t,s1,s2),s3))

=Concat(t,s1,Concat(t,s2,s3))

3.求串的长度:

StrLength(s),得串s中的元素个数

例如:

s=”datastructure”,则串的长度为14。

4.求子串操作

SubStr(s,i,m,t),求得由主串s的第i个字符开始,长度为m子串t。

s=”datastructure”,执行SubString(s,6,6,t),得t=”struct”。

5.判两个串是否相等:

StrEqual(s,t),当两个串s和t的长度相等,且两个串对应位置的每个字符都相等,返回TRUE,否则返回FLASE。

s=”datastructure”,t=”datastructure”,执行StrEqual(s,t),得TURE。

6.求子串在串中的序号(又称定位)

Index(s,t),若主串s中存在和串t值相同的子串,则返回它在主串s中第1个字符之后第一次出现的位置;

否则函数值为0。

如:

s=”datastructure”,t=”struct”,执行Index(s,t),返回6。

s=”datastructure”,t=”date”,执行Index(s,t),返回0。

7.置换操作

Replace(s,t,v),若主串s中存在和串t值相同的子串,则用v来替换。

注意用v替换主串s中出现的所有与t相等的不重叠的子串。

s=”abcabcababcaab”,t=”cab”,v=”c”,执行Replace(s,t,v),得:

s=”abccabcaab”。

4.2串的存储结构

一、行结构

unsignedcharString[256];

//用户可在255以内定义最大串长

//0号单元存放串的长度

这种存储结构是一种定长的顺序存储结构,较适应于源程序等的存储。

二、堆结构

(1)串值的存储

structstrstore{

char*ch;

//若是非空串,则按串长分配存储区,否则ch为NULL

intpos;

//pos是空闲区的首地址(已占用空间)的长度

};

其中:

pos是空闲区的首地址(已占用空间)的长度,s1和s2是串名,17和15是子串的长度

 

(2)串名的存储

串名

开始地址

串的长度

结束地址

开始地址

例:

文本编辑P

串名

1

1000

40

2

1040

16

3

1056

35

4

1091

14

5

1105

(3)操作:

插入、删除、排版等

4.3模式匹配

s=“s1s2,……sn”,t=“t1t2……tm”,m≤n

在s中是否存在长度为m的子串“sisi+1……si+m-1”,使得“sisi+1……si+m-1”=“t1t2……tm”。

称s为文本,t为模式。

s=“s1s2,…sisi+1……si+m-1…sn”,

“t1t2……tm”

4.3.1串匹配(搜索)算法

一、基本思想

从文本s的第一个字符起和模式t的第一个字符进行比

较,若相等,则继续逐个比较后续字符,否则从文本的第二个字符起重新和模式的字符进行比较。

依次类推,直至

si=t1,si+1=t2,……,si+m-1=tm

止,则称匹配成功,函数值为i,否则称匹配不成功,函数值为零。

二、示例

s="

abaabaaccabaabcabc"

t="

abaabca"

第一趟

文本abaabaaccabaabcabc

i=1→6

abaabc

j=1→6

第二趟

i=2

a

j=1

第三趟

i=3→4

ab

j=1→2

第四趟

i=4→8

abaab

j=1→5

第五趟

i=5

a

第六趟

i=6→7

ab

第七趟

i=7→8

第八趟

i=8

a

第九趟

i=9

第十趟

i=10→17

abaabca

j=1→8

在i=10,j=8时匹配成功,返回10。

模式匹配算法

intIndex(s,t){

//返回子串t在主串S中的位置。

若不存在,则函数值为0。

i=1;

j=1;

while(i<

=s[0]&

&

j<

=t[0])

if(s[i]==t[j])

{++i;

++j;

}//继续比较后继字符

else

{i=i-j+2;

}//i指针回溯,重新开始匹配

if(j>

t[0])returni-t[0];

elsereturni;

}//Index

O(m*n)。

问题:

模式匹配算法的时间复杂度能否进一步的改善呢?

3.2KMP(Knuth-Morris-Pratt)算法

解决的问题是:

向右“滑动”多少呢?

考察abaabaaccabaabcabc

abaabc

结论:

模式匹配过程中没有回溯。

i=6→8

(ab)aab

j=3→5

(a)b

j=2

i=10→17

intKMP(SStrings,SStringt){

=s[0]-t[0]+1&

if(j=0||s[i]==t[j])

++i;

//继续比较后继字符

j=next(j);

//模式串向右移动

t.len)returni-t[0];

elsereturn0;

}//KMP

O(m+n)

模式串的next函数的定义:

J

6

7

T

a

b

c

next[j]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1