数据结构课件-(4).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构课件-(4).ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件
- 资源描述:
-
1、第第5 5章章 串串知 识 点串的有关概念和术语串的有关概念和术语串的基本运算串的基本运算串的存储方法串的存储方法串的模式匹配运算串的模式匹配运算难 点串的模式匹配运算算法串的模式匹配运算算法要 求 掌握串的逻辑结构掌握串的逻辑结构 掌握串的存储结构掌握串的存储结构 熟练掌握串的基本运算熟练掌握串的基本运算 能设计串的计简单算法能设计串的计简单算法 了解串的匹配运算算法的基本思想了解串的匹配运算算法的基本思想 5-1 串的定义和基本运算串的定义和基本运算5-2 串的表示和实现串的表示和实现5-3 串的基本运算串的基本运算 小小 结结实验实验5 串子系统串子系统习题习题55-1-1 串的定义串的
2、定义1. 串的定义串的定义 串(串(String)是由零个或)是由零个或多个任意字符多个任意字符组成的组成的有限序有限序列列。一般一般记作:记作: s=a1 a2 aian 其中其中s 是串名,用双是串名,用双引号引号括括起来起来的的字符序列字符序列为串值,为串值,但但引号本身并不属于引号本身并不属于串的串的内容内容。ai(1=i=n)是)是一个任意一个任意字符字符,它,它称为称为串的串的元素元素,是构成串的,是构成串的基本单位基本单位,i是它在是它在整整个个串串中的序号中的序号;n为串的为串的长度长度,表示表示串中所串中所包含包含的的字符个字符个数数。 2 2几个术语几个术语(1 1)长度长
3、度串中串中字符字符的的个数个数,称为称为串的串的长度长度。(2)空串空串长度长度为零的为零的字符串称为字符串称为空串。空串。(3)空格串空格串由由一个一个或或多个连续多个连续空格组成的串空格组成的串称为称为空格串。空格串。(4)串相等)串相等两个串是相等的,是指两个串的两个串是相等的,是指两个串的长度长度相等且相等且对对应字符应字符都相等。都相等。(5)子串子串串中串中任意连续任意连续的的字符字符组成的子组成的子序列称为序列称为该串的子该串的子串。串。(6)主串主串包含包含子串的串子串的串称为称为该子串的主串。该子串的主串。(7)模式匹配模式匹配子串的子串的定位运算定位运算又又称为称为串的串的
4、模式匹配模式匹配,是,是一一种种求子串的求子串的第一第一个个字符字符在主串中在主串中序号序号的的运算运算。被被匹配匹配的主串的主串称称为为目标串,子串目标串,子串称为模式称为模式。【例【例5-15-1】字符串字符串的的长度长度及子串的及子串的位置位置。 字符串字符串 字符串长度字符串长度 S1=SHANG 5 S2=HAI 3 S3=SHANGHAI 8 S4=SHANGHAI 9 / 表示表示空格,空格,下同下同 S1是是S3、S4的子串,的子串,S1在在S3、S4中的位置中的位置都为都为1。 S2也是也是S3、S4的子串,的子串,S2在在S3中的位置中的位置为为6; S2在在S4中的位置中
5、的位置为为7。3 3串的串的应用应用 在在汇编语言汇编语言和和高级语言高级语言的的编译程序编译程序中,中,源程源程序序和目标和目标程序都是程序都是以以字符串表示字符串表示的。在的。在事务处理事务处理程序程序中,如中,如客户客户的的姓名姓名、地址地址、邮政编码邮政编码、货物货物名称名称等,等,一般也是作为字符串数据处理一般也是作为字符串数据处理的。的。另外另外,信息信息检索系统,检索系统,文字编辑文字编辑系统,系统,语言翻译语言翻译系统等,系统等,也也都是都是以以字符串字符串数据数据作为处理对象作为处理对象的。的。5-1-2 5-1-2 串的串的输入输入与与输出输出1字符串字符串的的输入输入 在
6、在C语言语言中,中,字符串字符串的的输入输入有有两种两种方法:方法:(1)使用)使用scanf () 函数函数 使用使用scanf () 函数函数时,时,输入格式输入格式中要中要设置设置%s,再再加上字符数组名称加上字符数组名称。【例【例5-25-2】 char strchar str10;10; printfprintf( (Input your strInput your str: : );); scanf scanf( (%s%s,str,str);); 使用使用scanf ()方式输入方式输入时,时,字符串字符串中中不能含有不能含有空格。空格。 在在C+C+中还中还可以可以用用输入输入
7、流流对象对象cincin 。(2)使用)使用gets() 函数函数 格式格式为:为:gets(字符字符数组名数组名);【例【例5-35-3】char str10;char str10;printfprintf( (Input your strInput your str: : ););gets(strgets(str););使用使用getsgets ()方式输入方式输入时,时,字符串字符串中中允许含有允许含有空空格。格。 2字符串字符串的的输出输出 字符串字符串的的输出输出也有也有两种两种方法:方法: (1)使用)使用printf () 函数函数 使用使用printf () 函数函数时,时,输
8、出格式输出格式中要中要设置设置%s,再,再加上字符加上字符数组名。数组名。【例【例5-45-4】 printfprintf( (Your strYour str is %s is %s,str,str););l 在在C+中还中还可以可以用用输出输出流流对象对象cout 。(2)使用)使用puts () 函数函数格式格式为:为:puts (字符字符数组名数组名);【例【例5-55-5】 printfprintf( (Your strYour str is is );); puts (str); 5-1-3 串的基本运算串的基本运算求串长求串长LenStr(s) 操作条件操作条件:串:串s存在存在
9、 操作操作结果:求出串结果:求出串s的的长度长度。串连串连接:接:ConcatStr(s1,s2) 操作条件操作条件:串:串s,s1存在存在。 操作操作结果:新串结果:新串s1是串是串s1和串和串s2连接以后连接以后的新串,的新串,原串原串s2值值不变不变,串,串s1的值则的值则改变改变。 【例【例5-5-6 6】设设 s1=Micsosoft,s2=Office, 求两个求两个串连串连接的结果。接的结果。 操作操作结果结果:s1=MicsosoftOffice; s2=Office。 3. 求子串求子串SubStr (s,i,len): 操作条件操作条件:串:串s存在存在。 操作操作结果:结
10、果:返回返回从串从串s的第的第i个个字符开始字符开始的的长度长度为为 len 的子串。的子串。len=0得到得到的是空串。的是空串。【例【例5-75-7】 SubStr (abcdefghi,3,4) = cdef” 4. 串串比较比较: EqualStr (s1,s2) 操作条件操作条件:串:串s1,s2存在存在。 操作操作结果:若结果:若s1= =s2,返回,返回值为值为0;若;若s1s2, 返返回回值值s2, 返回返回值值0。 5. 子串查找子串查找 IndexStr (s,t):找子串:找子串t在主串在主串s中中首次首次出现出现的的位置位置(也称(也称模式匹配模式匹配)。)。 操作条件
11、操作条件:串:串s,t存在存在。 操作操作结果:若结果:若t是是s的子串,则的子串,则返回返回t在在s中中首次出首次出现现的的位置位置,否则返回否则返回值为值为0。【例例5-5-8 8】子串】子串定位定位 IndexStr (abcdebda,bc)=2 IndexStr (abcdebda,ba)= 0 6. 串串插入插入 InsStr (s,t,i) 操作条件操作条件:串:串s,t存在存在 操作操作结果:将串结果:将串t插入插入到串到串s 的第的第i个个字符字符前,前,s的串值的串值发生改变发生改变。 7. 串串删除删除 DelStr(s,i,len) 操作条件操作条件:串:串s存在存在
12、操作操作结果:结果:删除删除串串s 中第中第i个个字符字符起起长度长度为为len的的子串,子串,s的串值的串值改变改变。5-2-1 5-2-1 定长定长顺序存储顺序存储1定长定长存储存储的的描述描述 在在C+语言语言中,中,字符串顺序存储可以字符串顺序存储可以用用一个一个字符字符型数组和型数组和一个一个整型整型变量表示变量表示,其中字符其中字符数组数组存储存储串值,整型串值,整型变量表示变量表示串的串的长度长度。#define MAXLEN 100 typedef Struct char vecMAXLEN; int len; Str ; / 可用可用Str来来定义定义该该类型类型的结构体的结
13、构体变量变量2存储方式存储方式 当计算机按字节(当计算机按字节(Byte)为单位编址时,一个存储单元)为单位编址时,一个存储单元刚好存放一个字符,串中相邻的字符顺序地存储在地址相邻刚好存放一个字符,串中相邻的字符顺序地存储在地址相邻的存储单元中。的存储单元中。 当计算机按字(例如当计算机按字(例如1个字为个字为32位)为单位编址时,一个位)为单位编址时,一个存储单元可以由存储单元可以由4个字节组成。此时顺序存储结构又有非紧凑个字节组成。此时顺序存储结构又有非紧凑格式和紧凑格式两种存储方式。格式和紧凑格式两种存储方式。(1)非紧凑存储)非紧凑存储 设串设串S=String Structure,计
14、算机字长为,计算机字长为32位(位(4个个yte),用非紧凑格式一个地址只能存一个字符,见图),用非紧凑格式一个地址只能存一个字符,见图5-1。其优点是运算处理简单,但缺点是存储空间十分浪费。其优点是运算处理简单,但缺点是存储空间十分浪费。(2)紧凑存储)紧凑存储 同样存储同样存储S=String Structure,用紧凑格式一个地址,用紧凑格式一个地址能存四个字符,见图能存四个字符,见图5-2。 紧凑存储的优点是空间利用率高,缺点是对串中字符处紧凑存储的优点是空间利用率高,缺点是对串中字符处理的效率低。理的效率低。stringureS trin gStr u ct u r e 图图5-1
15、非紧凑格式非紧凑格式 图图5-2 紧凑格式紧凑格式5-2-2 链接存储链接存储 对于长度不确定的字符串的输入,若采用定长字符串存对于长度不确定的字符串的输入,若采用定长字符串存储就会产生这样的问题:存储空间定的大,而实际输入字符储就会产生这样的问题:存储空间定的大,而实际输入字符串长度小,则造成内存空间的浪费;反之,存储空间定的小,串长度小,则造成内存空间的浪费;反之,存储空间定的小,而实际输入字符串长度大,则不够存储。此时可采用链接存而实际输入字符串长度大,则不够存储。此时可采用链接存储的方法。储的方法。1链接存储的描述链接存储的描述 用链表存储字符串,每个结点有两个域:一个数据域用链表存储
16、字符串,每个结点有两个域:一个数据域(data)和一个指针域()和一个指针域(next)。)。Data Next 其中其中: 数据域(数据域(data) 存放串中的字符;存放串中的字符; 指针域(指针域(next) 存放后继结点的地址。存放后继结点的地址。 仍然以存储仍然以存储S=String Structure为例,链接存储结构为例,链接存储结构如图如图5-3所示所示。 图图5-3 链接存储结构链接存储结构(1)链接存储的优点)链接存储的优点插入、删除运算方便;插入、删除运算方便;(2)链接存储的缺点)链接存储的缺点存储、检索效率较低。存储、检索效率较低。2串的存储密度串的存储密度 在各种串
17、的处理系统中,所处理的串往往很长或很多。在各种串的处理系统中,所处理的串往往很长或很多。例如一本书的几百万个字符,情报资料的几千万个条目,例如一本书的几百万个字符,情报资料的几千万个条目,这要求我们必须考虑字符串的存储密度。这要求我们必须考虑字符串的存储密度。 存储密度存储密度 = 串值所占的存储位串值所占的存储位 / 实际分配的存储位。实际分配的存储位。 串链接存储的存储密度小,存储量比较浪费,但运算串链接存储的存储密度小,存储量比较浪费,但运算处理,特别是对串的连接等操作的实现比较方便。处理,特别是对串的连接等操作的实现比较方便。 S t r r S 图图5-4 大结点结构表示大结点结构表
18、示 这样一来,存储空间利用率明显提高,但插入、删除极这样一来,存储空间利用率明显提高,但插入、删除极不方便,所以链接存储的优点也消失了。由于字符串的特殊不方便,所以链接存储的优点也消失了。由于字符串的特殊性,用链表作为字符串的存储方式也不太实用,因此使用较性,用链表作为字符串的存储方式也不太实用,因此使用较少。少。3大结点结构大结点结构 为了提高存储空间的利用率,有人提出了大结点的结构为了提高存储空间的利用率,有人提出了大结点的结构(即串的链块表示)。(即串的链块表示)。 所谓大结点,就是一个结点的值域存放多个字符,以减所谓大结点,就是一个结点的值域存放多个字符,以减少链表中的结点数量,从而提
19、高空间的利用率。例如每个结少链表中的结点数量,从而提高空间的利用率。例如每个结点存放四个字符,如图点存放四个字符,如图5-4。st ringstr u ctu r e5-2-3 串的堆分配存储结构串的堆分配存储结构 在实际应用中,往往要定义很多字符串,并且各字符串在实际应用中,往往要定义很多字符串,并且各字符串长度在定义之前又无法确定。在这种情况下,可以采用堆分长度在定义之前又无法确定。在这种情况下,可以采用堆分配存储(也称为索引存储),这是一种动态存储结构。配存储(也称为索引存储),这是一种动态存储结构。1堆分配存储的方法堆分配存储的方法(1)开辟一块地址连续的存储空间,用于存储各串的值,)
20、开辟一块地址连续的存储空间,用于存储各串的值,该存储空间称为该存储空间称为“堆堆”(也称为自由存储区)。(也称为自由存储区)。(2)另外建立一个索引表,用来存储串的名字()另外建立一个索引表,用来存储串的名字(name)、)、长度(长度(length)和该串在)和该串在“堆堆”中存储的起始地址中存储的起始地址(Stradr)。)。(3)程序执行过程中,每产生一个串,系统就从)程序执行过程中,每产生一个串,系统就从“堆堆”中中分配一块大小与串的长度相同的连续空间,用于存储该串的分配一块大小与串的长度相同的连续空间,用于存储该串的值,值, 并且在索引表中增加一个索引项,用于登记该串的并且在索引表中
展开阅读全文