数据结构ppt:第3章串与文本编辑.ppt
《数据结构ppt:第3章串与文本编辑.ppt》由会员分享,可在线阅读,更多相关《数据结构ppt:第3章串与文本编辑.ppt(71页珍藏版)》请在三一办公上搜索。
1、第3章 串与文本编辑,3.1 串的类型定义3.2 串的存储表示3.3 串的模式匹配算法3.4 文本编辑3.5 小结,0,数据结构与算法,3.1 串的类型定义,1.串的相关术语串是由零个或多个字符组成的有限序列,记为:s=s1s2sn。其中s是串名;双引号内的字符序列s1s2sn是串值;n(n=0)表示串的长度。,1,数据结构与算法,3.1 串的类型定义,例如:s1=“data structure”/串,长度为14 串长度为零的串称为空串。例如:s=“”/空串,长度为0 组成串的字符均为空格的串称为空格串或空白串。例如:s=“”/空格串,长度为4,2,数据结构与算法,3.1 串的类型定义,一个串
2、中任意个连续字符组成的子序列称为该串的子串。空串是任何串的子串。例如:s1=“data structure”s2=“data”/s2是s1的子串 s3=“structure”/s3是s1的子串 s4=“datastructure”/s4不是s1的子串包含子串的串称为主串。上例中s1为主串。,3,数据结构与算法,3.1 串的类型定义,子串的序号是该子串的第一个字符在主串中的序号。在上例子串s2在s1中的序号为1,s3在s1中的序号为6。S4不是s1的子串,也可以说,s4在s1中的序号为0。当且仅当串的长度相等并且对应位置上的字符都相同时,称这两个字符串是相等的。例如:s1=“data struc
3、ture”s2=“data structure”s3=“datastructure”/s1与s2相等,s3与s1和s2均不相等,4,数据结构与算法,3.1 串的类型定义,按照串中字符的次序,逐一比较两个字符串中字符的大小,以确定两个串的大小关系的操作,称为串的比较。例如:s5=data,s6=DATA,则有s5 s6的比较结果为1,s5 s6的比较结果为0。,5,数据结构与算法,3.1 串的类型定义,2.串的ADT定义在引入串的ADT定义前我们先来看一个字符串应用的例子。【例3-1】有一个字符串“live on no evil”,检查它是否为“回文”。当一个字符串顺读和逆读都一样,就可以称这个
4、字符串是回文。,6,数据结构与算法,3.1 串的类型定义,英文中的回文具有广义和狭义之分,广义的回文是指串中的空格字符不计入内,比如串“ten animals I slam in a net”去掉空格字符后是一个回文。狭义的回文是指将空格字符计入在内,比如题目中的“Live on no evil.”不过滤掉空格就是回文字符串。单个英文单词的回文符合狭义回文。例如:eye、mum、refer、level等。,7,数据结构与算法,3.1 串的类型定义,判断一个字符串s是否为回文(狭义的),需要进行如下操作:(1)存储串s,并以相反顺序存储为串t;(2)比较s与t;(3)得出字符串s是否为回文串的判
5、断;(4)输出回文串s例3-1是一个串的实际应用问题,为解决问题所需要的有关串的操作,即串类型应该提供的应用接口都是以串为单位,而不是串中的单个字符为单位。下面给出串的ADT定义:,8,数据结构与算法,3.1 串的类型定义,ADT StringData:D=ai ai ElemSet,i=1,2,.,n,n=0Structure:S=|ai-1,ai D,i=2,3,noPerations:ConstructString()/操作结果:创建一个空的串sDestructString()/操作条件:已有串s/操作结果:销毁当前串sStringLen()/操作条件:已有串s/操作结果:得到当前串s的
6、实际长度,9,数据结构与算法,3.1 串的类型定义,StringCpy(t)/操作条件:已有串s和参数串t/操作结果:将t复制到当前串s中OutputString()/操作条件:已有串s/操作结果:输出当前串sSubString(pos,len,&t)/操作条件:已有串s/操作结果:取串s中从第pos个字符开始的,长度为len的子串,由t返回DelSubString(pos,len,&t)/操作条件:已有串s和一个参数串t/操作结果:删除当前串从第pos个字符开始,长度为len的子串/并由t返回被删除的子串,10,数据结构与算法,3.1 串的类型定义,InsertSubString(pos,t
7、)/操作条件:已有串s和参数串t/操作结果:将t插入到当前串第pos个位置前ConnectString(t)/操作条件:已有串s和参数串t/操作结果:将t连接到当前串s之后ClearString()/操作条件:已有串s/操作结果:将当前串s清空ReplaceString(pos,len,t)/操作条件:已有串s和参数串t/操作结果:将当前串s中第pos个字符开始的长度为len的子串,替换为tADT String;,11,数据结构与算法,3.2 串的存储表示,3.2.1 串的顺序存储将串所占用空间的大小称为串容量,实际存在的元素个数称为串长,如图3-1所示。,12,数据结构与算法,3.2 串的存
8、储表示,为了表示串的结束,可在串内容最后一个有效字符后,再多开辟一个存储空间,存放结束标志0(C/C+语言中的字符串就采用这种方法),如图3-2所示。,13,数据结构与算法,3.2 串的存储表示,借助于顺序存储时数组的0号下标存储串长,即有效地利用了空间,又使得串中字符的位序与其存放位置(下标)一致,如图3-3所示。,14,数据结构与算法,3.2 串的存储表示,定义顺序串:#define MAX 100class SqStringpublic:char*base;/存储串的字符数组/base0表示串的实际长度,不另设结束标志int maxlen;/表示串的最大长度public:SqString
9、();/构造函数SqString(char*s);/构造函数SqString(SqString/析构函数,15,数据结构与算法,3.2 串的存储表示,bool InsertString(int pos,SqString,16,数据结构与算法,3.2 串的存储表示,顺序串的构造与析构 串的构造有三种方法,分别是构造空串、由基本类型的字符串构造一个新串以及使用串对象来构造串。下面给出三种方法构造串的实现过程。(1)构造空的顺序串。【算法3-1-1】SqString:SqString()maxlen=MAX;base=new charmaxlen+1;/0下标留作记录长度base0=0;,17,数据
10、结构与算法,3.2 串的存储表示,(2)由基本字符串构造一个新串。【算法3-1-2】SqString:SqString(char*s)/由机内标准串构造maxlen=MAX;base=new charmaxlen+1;base0=strlen(s);for(int i=0;si!=0;i+)basei+1=si;,18,数据结构与算法,3.2 串的存储表示,(3)使用串对象来构造串。【算法3-1-3】SqString:SqString(SqString,19,数据结构与算法,3.2 串的存储表示,(4)析构函数【算法3-1-4】SqString:SqString()delete base;,2
11、0,数据结构与算法,3.2 串的存储表示,顺序串插入操作顺序串插入操作的功能是将一个指定的串插入到当前串中的指定位置之前,以s串和t串分别表示当前串和待插入串,则插入前后s串与t串的状态如图3-4(a)和图3-4(b)所示。,21,数据结构与算法,3.2 串的存储表示,22,数据结构与算法,3.2 串的存储表示,顺序串插入操作实现算法为:检查插入位置的合法性,即当插入位置posbase0,或base0+t.base0 maxlen(没有足够空间插入t)时,提示错误信息,终止程序;从pos指向的位置开始,一直到最后的字符,每个字符都要向后移动,移动的长度为t串的长度;插入t串,修改s的串长,操作
12、成功,结束。,23,数据结构与算法,3.2 串的存储表示,【算法3-2】bool SqString:InsertString(int pos,SqString/元素后移,24,数据结构与算法,3.2 串的存储表示,for(i=1;i=t.base0;i+)basepos-1+i=t.basei;/插入元素base0+=t.base0;return true;,25,数据结构与算法,3.2 串的存储表示,顺序串删除操作顺序串删除操作的功能是删除s串中从第pos个位置开始的长度为len的子串。如图3-5所示。,26,数据结构与算法,3.2 串的存储表示,27,数据结构与算法,3.2 串的存储表示,
13、顺序串删除操作实现算法为:检查参数的合法性,有两种不合法的操作条件:一是pos的值不在串s的长度范围内,即posbase0;二是从串s第pos个位置开始不存在长度为len的子串,即pos+len-1base0;将待删除的子串复制给t;在s中删除指定的子串,修改s的串长,操作成功,结束。,28,数据结构与算法,3.2 串的存储表示,【算法3-3】bool SqString:DelSubString(int pos,int len,SqString,29,数据结构与算法,3.2 串的存储表示,for(i=pos+len;i=base0;i+)/元素前移basei-len=basei;base0-=
14、len;return true;,30,数据结构与算法,3.2 串的存储表示,输出顺序串操作顺序串输出操作的功能是将串中的字符全部输出。顺序串输出操作实现算法为:检查串时否为空串,若为空,输出空串信息;若串非空,则利用循环输出串的内容;操作成功,结束。,31,数据结构与算法,3.2 串的存储表示,【算法3-4】void SqString:OutputString()if(base0=0)/判断串是否为空串cout空串endl;elsefor(int i=1;i=base0;i+)coutbasei;coutendl;,32,数据结构与算法,3.2 串的存储表示,串的连接串的连接,顾名思义,是指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 ppt 文本编辑
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6578867.html