《数据结构》串》PPT课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《数据结构》串》PPT课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 PPT 课件
- 资源描述:
-
1、第第4 4章章 串串4.1串及其操作串及其操作 4.2串的存储结构串的存储结构4.3串的基本运算实现串的基本运算实现 4.4串的模式匹配运算串的模式匹配运算 习题习题 在非数值处理的应用领域中,字符串的应用非常广泛。在非数值处理的应用领域中,字符串的应用非常广泛。如编辑器如编辑器(Edit、Word本质上是字符串处理本质上是字符串处理)、信息检索、信息检索(字字符串比较符串比较)等。等。实际上,编写数值计算程序的机会很有限。从发明计实际上,编写数值计算程序的机会很有限。从发明计算机的思路来说,其目的是为了模拟人类的对信息的逻辑算机的思路来说,其目的是为了模拟人类的对信息的逻辑处理方法,而数值计
2、算仅仅是一种逻辑思路的标准化。处理方法,而数值计算仅仅是一种逻辑思路的标准化。现今我们使用的计算机的硬件结构主要反映数值计算的现今我们使用的计算机的硬件结构主要反映数值计算的需要的,因此,在处理字符串数据时比处理整数和浮点数需要的,因此,在处理字符串数据时比处理整数和浮点数要复杂的多。而且,在不同类型的应用中,所处理的字符要复杂的多。而且,在不同类型的应用中,所处理的字符串具有不同的特点,要有效地实现字符串的处理,就必须串具有不同的特点,要有效地实现字符串的处理,就必须根据具体情况使用合适的存储结构。下面将讨论字符串的根据具体情况使用合适的存储结构。下面将讨论字符串的一些处理方法和字符串的几种
3、不同的存储结构。一些处理方法和字符串的几种不同的存储结构。4.1 串及其操作串及其操作 4.1.1 串的逻辑结构串的逻辑结构 定义:定义:串串(字符串字符串),是由零个或多个字符组成的有限序,是由零个或多个字符组成的有限序列。一般记作:列。一般记作:s=a0a1an-2an-1 (n0)s是串的名。是串的名。双引号括双引号括起来是是串的值。起来是是串的值。n为串的长度。为串的长度。空串空串为零个字符,为零个字符,n=0。子串子串为串中任意个连续的字符组成的子序列。为串中任意个连续的字符组成的子序列。位置位置为字符在序列中的序号。为字符在串中的称作。为字符在序列中的序号。为字符在串中的称作。子串
4、位置子串位置以子串的第一个字符在主串中的位置来表示。以子串的第一个字符在主串中的位置来表示。举例:举例:a=This is a string 串长串长=16 b=string串长串长=6,是,是a的子串,在的子串,在a串的位置是串的位置是10 c=串长串长=2,的空格串,它不是,的空格串,它不是a和和b的子串。的子串。串的集合定义:串的集合定义:设设string=(D,R)是一个数据结构,其中是一个数据结构,其中 D=a0,a1,an-1 为字符元素的集合,为字符元素的集合,i=0,n-1,并且,并且n0。R=|ai-1,aiD,i=1,2,n-1 R为上元素的关系集合为上元素的关系集合 则称
5、则称 string是一个字符串。字符串与线性表的区别是是一个字符串。字符串与线性表的区别是 它的数据对象为字符集。它的数据对象为字符集。4.1.2 串的基本运算串的基本运算 (1)赋值操作赋值操作assign(s,t)。将。将t的值赋给的值赋给s。(2)串相等判断串相等判断equal(s,t)函数。若函数。若s串与串与t串相等,则函数串相等,则函数返回返回1,否则函数将返回,否则函数将返回0。(3)串的联接操作串的联接操作concat(s,t)函数。将函数。将s串和串和t串联接成一串联接成一个串,新生成的串是个串,新生成的串是s串在前,而串在前,而t串紧接串紧接s串的尾部。串的尾部。例如,设例
6、如,设a=data,b=structure,执行执行concat(a,b),新生成的串是新生成的串是data structure。串的联接不满足交换律串的联接不满足交换律:concat(s,t)!=concat(t,s);串的联接满足结合律串的联接满足结合律:concat(s1,concat(s2,s3)=concat(s1,s2,s3)其运算结果是将这其运算结果是将这3个串的值依次首尾相接得到一个新串。个串的值依次首尾相接得到一个新串。(4)求长度求长度length(s)函数。其函数值为串函数。其函数值为串s中字符的个数。中字符的个数。(5)求子串求子串sub(s,start,len,t)。
7、若。若 0startlength(s)0lenlength(s)-start则则t中值为从串中值为从串s中第中第start个字符起,长度为个字符起,长度为len的字符序列,的字符序列,并且函数返回值为并且函数返回值为1;否则函数返回值为;否则函数返回值为0。例如,例如,s=data structure,sub(s,5,5,t),则则 t=struc。(6)子串定位子串定位index(s,t)函数。若在主串函数。若在主串s中存在和中存在和t相等的相等的子串,则函数值为子串,则函数值为s中第一个这样的子串在主串中第一个这样的子串在主串s中的位置,中的位置,否则函数值为否则函数值为-1。注意,在此。
8、注意,在此t不能是个空串。例如,不能是个空串。例如,s=data structure,t=ru,则则index(s,t)=7。(7)替换替换replace(s,t,v)。操作结果是以串。操作结果是以串v替换串替换串s中出现中出现的所有和非空子串的所有和非空子串t相同的不重叠子串。相同的不重叠子串。4.2 串的存储结构串的存储结构 在程序执行的过程中,串的值可变。所以,与在在程序执行的过程中,串的值可变。所以,与在程序出现的其他类型的变量一样,给要处理的串赋程序出现的其他类型的变量一样,给要处理的串赋一个变量名,这样在对串进行操作时,可以通过变一个变量名,这样在对串进行操作时,可以通过变量名访其
9、值。量名访其值。串的存储结构有两种形式:串的存储结构有两种形式:一种是将串设计成一种结构类型,串是字符型一种是将串设计成一种结构类型,串是字符型的数组,从串名可直接访问到串值,串值的存储分的数组,从串名可直接访问到串值,串值的存储分配是在编译时完成;配是在编译时完成;一种是串值的存储分配是在程序运行时完成,在一种是串值的存储分配是在程序运行时完成,在串名和串值之间需要建立一个对照表,这个对照表串名和串值之间需要建立一个对照表,这个对照表称之为串名的存储映像。称之为串名的存储映像。4.2.1 顺序存储结构顺序存储结构 用一组地址连续的存储单元存储串字符序列。唯一确用一组地址连续的存储单元存储串字
10、符序列。唯一确定一个串,需要二个数据:串的起始地址,串的长度。在定一个串,需要二个数据:串的起始地址,串的长度。在C语言中,对字符串处理两个要素是:数组名,结束标记语言中,对字符串处理两个要素是:数组名,结束标记符号,如图符号,如图4.1所示所示 ch datastr ucture001234567891011121314n-1 图4.1串的顺序存储结构 说明:说明:ch是一个数组,存放串是一个数组,存放串”data structure”,判断串的,判断串的结束标志为字符结束标志为字符0,在它前面的字符组成串。在这种表,在它前面的字符组成串。在这种表示方法中,访问子串方便,但插入、删除麻烦,需
11、要大量示方法中,访问子串方便,但插入、删除麻烦,需要大量移动字符。例如,要取子串移动字符。例如,要取子串 sub(s,5,4,t),只要将数组,只要将数组ch5到到ch8赋给赋给t,便可实现求子串运算。,便可实现求子串运算。顺序存储结构又分为非紧缩格式和紧缩格式。顺序存储结构又分为非紧缩格式和紧缩格式。a.非紧缩格式非紧缩格式 一个存储单元存放一个字符。若计算机的存储单元是一个存储单元存放一个字符。若计算机的存储单元是按字编址,并且计算机字长大于八位二进制数,这样,在按字编址,并且计算机字长大于八位二进制数,这样,在一个存储单元仅仅存放一个字符就浪费存储空间,但简化一个存储单元仅仅存放一个字符
12、就浪费存储空间,但简化了对串的操作。例如,在一个字长为了对串的操作。例如,在一个字长为32位的计算机中,其位的计算机中,其一个存储单元为四个字节,但只存放一个字符一个存储单元为四个字节,但只存放一个字符(字符只占一字符只占一个字节个字节),所以空间浪费,如图,所以空间浪费,如图4.2所示。所示。b.紧缩格式紧缩格式 图图4.3紧缩格式为了节省存储空间,也可以用紧缩方紧缩格式为了节省存储空间,也可以用紧缩方式,即在一个存储单元中存放多个字符,如图式,即在一个存储单元中存放多个字符,如图4.3所示,在所示,在一个存储单元中存放一个存储单元中存放4个字符。显然,紧缩格式可以节省个字符。显然,紧缩格式
13、可以节省空间,但在对串值进行访问时需要花费较多时间分离同一空间,但在对串值进行访问时需要花费较多时间分离同一存储单元中字符。存储单元中字符。da ta s t ruc tu re图4|2 非紧缩格式 d a t a s t ru c t ur e图4.3紧缩格式 实际使用:实际使用:如果计算机采用以字节为如果计算机采用以字节为存储单元,一个字符占用一个存储单存储单元,一个字符占用一个存储单元元(字节字节),此时既节省空间,处理又,此时既节省空间,处理又方便,方便,C语言中字符串存储采用该方语言中字符串存储采用该方法,即图法,即图4.1所示,在后面讨论的串运所示,在后面讨论的串运算,都采用这种存
14、储结构算,都采用这种存储结构(字符数组(字符数组)。4.2.2 链式存储结构链式存储结构 用链表方式存储串值。由于串结构的特殊性,即结构用链表方式存储串值。由于串结构的特殊性,即结构中每一个数据元素是一个字符,用链表存储串值时,结点中每一个数据元素是一个字符,用链表存储串值时,结点的大小需要讨论的大小需要讨论每个结点是存放一个字符,还是存放每个结点是存放一个字符,还是存放多个字符。例如,图多个字符。例如,图4.4所示是结点大小分别为存放所示是结点大小分别为存放4个字个字符和符和1个字符。个字符。(a)结点大小为4的链表(b)结点大小为1的链表 图4.4结点大小不同的链表 4.2.3 堆存储结构
15、堆存储结构 堆结构是一种动态存储结构。系统将一个容量很大的堆结构是一种动态存储结构。系统将一个容量很大的连续空间作为多个串值可共用的空间,每当建立一个新串连续空间作为多个串值可共用的空间,每当建立一个新串时,若该串尚未赋值,它不占堆的存储空间;若要给该串时,若该串尚未赋值,它不占堆的存储空间;若要给该串赋值,首先,从未分配的堆空间中分配给该串值要求的空赋值,首先,从未分配的堆空间中分配给该串值要求的空间,然后,将串值写入到分配的空间中;同样,当串的值间,然后,将串值写入到分配的空间中;同样,当串的值无意义或串值被赋空串时,原串值所占用的空间要还给堆。无意义或串值被赋空串时,原串值所占用的空间要
16、还给堆。所以,串的存储地址是动态分配的,一个串值的确定是通所以,串的存储地址是动态分配的,一个串值的确定是通过串在堆中的起始位置和串的长度实现的。为此,串名和过串在堆中的起始位置和串的长度实现的。为此,串名和串值之间要建立一个对照表串值之间要建立一个对照表。例如图例如图4.5,所示为对照表和,所示为对照表和存放字符串的堆。存放字符串的堆。串名起址串长0123456789 A 0 4datastruct B 4 9urebookfree=17 C 13 4 (a)对照表对照表 (b)堆堆store的状态的状态 图图4.5 堆存储结构堆存储结构在图中假定,堆是一个字符数组,在图中假定,堆是一个字符
17、数组,定义定义为:为:char storeMAX;/*存放串值的堆,存放串值的堆,MAXMAX表示连续空间最大容量表示连续空间最大容量*/int free;/*free free为当前可分配空间起始地址的指针,起初值为为当前可分配空间起始地址的指针,起初值为0 0*/在堆中存放的三个串分别是:在堆中存放的三个串分别是:a=data b=structure c=book 4.3 串的基本运算实现串的基本运算实现 字符串是一种特殊的线性表,对它的操作不同于对线字符串是一种特殊的线性表,对它的操作不同于对线性表的处理,有自己独特的处理方法。在实际串的处理中,性表的处理,有自己独特的处理方法。在实际串
18、的处理中,其存储结构为字符数组。下面讨论在这种存储方式下的串其存储结构为字符数组。下面讨论在这种存储方式下的串的运算。的运算。定义:定义:#define MAX 100 /*MAX MAX为数组最大下标为数组最大下标 */char tMAX,sMAX;/*s,t s,t为存放字符串的数组为存放字符串的数组 */(1)算法算法4.1 求字符串长度函数求字符串长度函数length(s)。int length(char s)/*求串求串s s的长度的长度 */int i;for(i=0,si!=0;i+);return(i);(2)算法算法4.2求子串函数求子串函数substr(s,start,le
19、n,t)int sub(char s,int start,int len,char t)/*若若0startlength(s0startlength(s)并且并且0lenlength(s)-start0lenlength(s)-start,则,则将串将串s s中从第中从第startstart个字符起,长度为个字符起,长度为lenlen的字符序列复制到的字符序列复制到t t中,函中,函数返回数返回1 1;否则函数返回;否则函数返回0 0*/int n,i;if(start=(n=length(s)return(0);if(lenn)return(0);for(i=0;i=MAX)return(0
20、);for(i=0;in;i+)sm+i=ti;ti=0;/*联接得到串的结束标志联接得到串的结束标志 */return(1);(4)算法算法4.4 串相等判断函数串相等判断函数equal(s,t)int equal(char s,char t)/*若若s s串与串与t t串相等,则函数返回串相等,则函数返回1 1,否则函数将返回,否则函数将返回0 0*/int m,n,i;m=length(s);n=length(t);if(m!=n)return(0);for(i=0;im;i+)if(si!=ti)return(0);return(1);另外,在另外,在C语言的库函数中已经包含了一些串操
21、作函语言的库函数中已经包含了一些串操作函数,例如,赋值函数数,例如,赋值函数strcpy,判断函数,判断函数strcmp,求长度函,求长度函数数strlen,求子串,求子串substr等,在程序设计中可以直接调用。等,在程序设计中可以直接调用。4.4 串的模式匹配运算串的模式匹配运算 模式匹配:模式匹配:子串定位运算子串定位运算index(s,t,start),即在主串,即在主串s中寻找子串中寻找子串t的过程通常称作串的模式匹配的过程通常称作串的模式匹配(其中其中t称为称为模式模式)。当匹配成功时当匹配成功时:index(s,t,start)函数的值为函数的值为t在在s中的序号;中的序号;当匹
22、配失败时,当匹配失败时,index(s,t,start)函数的返回值为函数的返回值为-1。为增加通用性,定义了一个为增加通用性,定义了一个start用来表示在用来表示在s中开始中开始匹配的字符位置。例如,匹配的字符位置。例如,s=abcdef,t=cde index(s,t,0)=2 s=abcdef,t=ab index(s,t,0)=0 s=abcdef,t=ad index(s,t,0)=-1 4.4.1 BF算法算法(Brute-Force)算法的基本思想:算法的基本思想:在主串在主串s中取从第中取从第i(i的初值的初值为为start)个字符起,并且长度和串个字符起,并且长度和串t相等
23、的子串和相等的子串和t比较,若相等,则求得函数值为比较,若相等,则求得函数值为i,否则,否则i增增1直至直至串串s中不存在从中不存在从i开始和开始和t相等的子串为止,匹配失相等的子串为止,匹配失败,返回败,返回-1。例如,主串例如,主串s为为ababcabcacbab 模式串模式串t为为abcac 匹配过程如图匹配过程如图4.6所示所示 s=a b a b c a b c a c b ab 取i=0开始子串subch!=ti=0t=a b c a c 匹配失败,i=i+1=1s=a b a b c a b c a c b ab 取i=1开始子串subch!=ti=1 t=a b c a c 匹
24、配失败,i=i+1=2s=a b a b c a b c a c b ab“取i=2开始子串subch!=ti=2 t=a b c a c 匹配失败,i=i+1=3s=a b a b c a b c a c b ab 取i=3开始子串subch!=ti=3 t=a b c a c 匹配失败,i=i+1=4s=a b a b c a b c a c b ab 取i=4开始子串subch!=ti=4 t=“a b c a c 匹配失败,i=i+1=5s=a b a b c a b c a c b ab 取i=5开始子串subch=ti=5 t=a b c a c 匹配成功,返回i=5 图4.6 取
25、子串的匹配过程 算法算法4.5 取子串进行比较的模式匹配算法。取子串进行比较的模式匹配算法。int index(char s,char t,int start)int i,eq,m,n;char subchMAX;m=strlen(s);n=strlen(t);if(startm)return(-1);/*起始点起始点+模式串长度模式串长度主串长度主串长度 */*subchsubch为在为在s s中从中从i i开始与开始与t t相同长度子串相同长度子串*/i=start;eq=sub(s,i,n,subch);while(eq)if(strcmp(t,subch)break;/*i i开始的子
展开阅读全文